【发布时间】:2019-03-14 10:53:40
【问题描述】:
伙伴们, 我的第一篇文章,搜索并尝试不同的解决方案和方法 - 最后在这里结束询问。
我有一个包含多个相关表的数据库。客户有一个位置,该位置具有多个设置(生命周期,例如计划、构建、运行),并且每个设置都有不同的电路。基本上:
客户->位置->设置->电路
现在我想要一个包含设置和电路信息的位置列表,其中选择了电路的供应商。
我将如何用 eloquent 编写这个查询?这是我到目前为止所尝试的,但它似乎忽略了“供应商”条款......
$locations = Locations::with(
['settings' => function($query) use ($request)
{
$query->with(
['circuits' =>function($query2) use ($request)
{
$query2->where('supplier', $request->supplier);
}
]
);
}
])
->where('customer_id', $customers_id)
->orderBy('country')
->orderBy('city')
->get();
我敢肯定,所有“hasMany”和“belongsTo”扩展都是可用的。 感谢阅读和回答 乌多斯基
更新:工作代码,基于 Enver 的提示:
$locations = Locations::with('settings')
->whereHas('settings.circuits', function($query) use ($request)
{
$query->where('supplier', $request->supplier);
}
)
->where('customer_id', $report->customers_id)
->orderBy('country')
->orderBy('city')
->get();
HasManyThrough 方法也很顺利:
扩展 Locations 模型:
public function circuits()
{
return $this->hasManyThrough('App\Circuits', '\App\Settings');
}
然后使用这个查询:
$locations = Locations::with('circuits')
->whereHas('circuits', function($query) use ($request)
{
$query->where('supplier', $request->supplier);
}
)
->where('customer_id', $report->customers_id)
->orderBy('country')
->orderBy('city')
->get();
谢谢大家!
【问题讨论】:
-
您是否尝试过使用
with('settings.circuts')嵌套关系或定义 HasManyThrough 关系? -
谢谢哈文! - 测试了“with('settings.circuits') 方法,仍然得到相同的结果。HasManyThrough 仍有待测试。首先需要阅读文档。
标签: laravel eloquent eager-loading relation nested-queries