laravel - 雄辩,从嵌套关系查询中检索结果
问题描述
这是我的查询:
$profile = \App\ShippingProfile::findOrFail(2)
::with('costs')
->with( ['methods.zone' => function($query) {
$query->where('id', 2);
}])->get();
所以我需要运输资料 id 2,相关的“成本”模型及其相关的 id 为 2 的“方法”,以及方法的相关“区域”。
但我不知道如何得到结果。如果我尝试->get()
,我会得到所有ShippingProfiles,如果尝试
->first()
我得到个人资料 id 1。
那么我将如何检索结果呢?我只看到了“get”、“first”和“find”……还是查询有问题?
解决方案
您当前的代码存在一些问题。首先你有一个语法错误:
$profile = \App\ShippingProfile::findOrFail(2)
::with('costs')
第二个::
应该是->
。
其次,当你这样做时,firstOrFail()
你实际上是在执行查询并返回 aModel
作为结果。因此,当您将其余部分链接到Model
实例时,您可能会遇到错误。
但是,有几种方法可以实现您的目标。首先,尝试使用whereKey
which 将 where 子句添加到针对主键的查询中(就像 usingfindOrFail
所做的那样 - 但它不会立即执行查询并返回模型)并使用first()
急切的关系来获取模型实例加载:
$profile = \App\ShippingProfile::whereKey(2)
->with(['costs', 'method.zone' => function ($query) {
$query->where('id', 2);
}])
->first();
或者,如果您已经有模型的实例,则可以使用load(...)
, 与with(...)
加载关系的方式相同:
$profile = App\ShippingProfile::findOrFail(2);
$profile->load(['costs', 'method.zone' => function ($query) {
$query->where('id', 2);
}]);
推荐阅读
- mysql - 查找并显示所有唯一 ID,其中第二列条目都是重复的
- reactjs - 编译器错误:类型“{}”不可分配给类型“只读”
>'。类型“{}”中缺少属性“匹配” - sql-server - 将 Excel 导出到 SQL 而不重复值
- python - 我找不到 Flask 包单击 + 登录 File-->Settings-->Project:project_name-->Project Interpreter
- ruby-on-rails - 为什么`database.yml`文件在config文件夹中,而不是在ruby on rails的db文件夹中?
- android - MVVMCross Android 按钮绑定禁用它
- elasticsearch - elasticsearch/kibana 通配符搜索
- powershell - Powershell Remove-Item 获取日志文件
- .htaccess - 额外的 www 被添加到域中
- amazon-web-services - 从实例获取 AWS 账户 ID