laravel - findOrFail 返回正确和错误的记录
问题描述
我有一个名为Location的模型,正在尝试获取特定实体:/api/location/2
当我这样做时,我得到了 ID 为 2 的记录的结果,但还有一条额外的记录:
{
id: 2,
name: "Considine Group",
address: "Rau Union",
uri: "http://localhost:6890/api/location/2"
},
{
id: 467,
name: "Lubowitz, Parker and Kuhn",
address: "Bernice Ports",
uri: "http://localhost:6890/api/location/467"
}
我在控制器中的显示功能非常简单:
public function show(ShowLocationRequest $request, Location $Location)
{
$Loc = Location::with('company:id,name')->findOrFail($Location);
return response()->json(["data"=>$Loc],200);
}
即使我删除公司关系,它也会做同样的事情。FirstOrFail 会抛出错误:
Invalid parameter number: mixed named and positional parameters。
看着望远镜,我看到 select 语句在那里,正如我所期望的那样:
select * from locations
where id
= '2' and locations
. deleted_at
is null limit 1
这是我感到困惑的地方,就在望远镜中的那个查询之上,还有一个(也是最终的)查询:
select
*
from
`locations`
where
`locations`.`id` in (
2,
'Considine Group',
'Rau Union',
'13552 Fritsch Underpass',
'Janellefort',
'MO',
'16407-4623',
'',
'467-980-9647 x03308',
'',
'',
'nova.weimann@bartell.net',
'',
'',
'',
'',
'active',
0,
'1573583520',
'1573583520',
'http://localhost:6890/api/location/2'
)
and `locations`.`deleted_at` is null
当我在 MySql 工作台中手动运行该查询时,我得到了两个结果,就像在响应中一样。
谁能帮我理解问题出在哪里?我能够在其他模型上重现这一点。它在同一个实体之间是一致的(位置 id 2 总是会这样做),但位置 id 3 不会。
任何帮助表示赞赏。
解决方案
您将整个Location
模型传递给findOrFail
.
当您键入提示 id 时,它会执行查询Location
以为您找到模型,并将其保存到变量中。这导致findOrFail
查找您传递给它的集合中的每个键。第二行它的发现是由于id
位置 2 的电话号码中存在的可能被-
之后截断的。
而不是方法中的类型提示$location
,只需执行
public function show(ShowLocationRequest $request, $Location)
这将导致您的查询仅搜索路线中的 id,而不是位置模型中的每个键。
选项二是留下类型提示并在之后加载关系
public function show(ShowLocationRequest $request, Location $location)
{
$location->load('company,name');
}
推荐阅读
- javascript - 将 react 渲染方法拆分为单独的 npm 包
- java - java.lang.NoClassDefFoundError:无法在 Windows 10 上初始化类 org.rocksdb.Options
- javascript - 如何使用 Ramda 将代码从 Lisp(MIT Schema)翻译成 JavaScript?
- c - 术语和代码线的平等
- angular - 角度清理变音符号的问题
- php - 使用 Angular.js 和 PHP 重新加载页面时获取空白页面
- python-3.x - 安装了熊猫但仍然无法导入它
- android - recyclerview 或 viewpager 上的 setRotationY(180) 在 Android 9(API 28)中创建滚动问题
- apache-flink - Apache Flink:从保存点启动作业时出现 AWS S3 超时异常
- xaml - 如何更改 BottomBarPage 中的工具栏背景颜色