Eloquent "super-eager" 可以嵌套查询吗?
Eloquent "super-eager" nested query possible?
朋友们,
我的第一个 post,搜索并尝试不同的解决方案和方法 - 最后在这里结束询问。
我有一个包含多个相关表的数据库。客户有一个位置,该位置有多个设置(生命周期,例如计划、构建、运行),每个设置都有不同的电路。基本上:
客户->位置->设置->线路
现在我想要一个包含设置和电路信息的位置列表,其中选择了电路供应商。
如何使用 eloquent 编写此查询?到目前为止,这是我尝试过的方法,但它似乎忽略了 "where supplier" 子句...
$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 方法也能顺利运行:
扩展位置模型:
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();
谢谢大家!
您可以使用预加载嵌套关系查询。
示例:
$relation_sort = 'asc';
$nested_sort = 'desc';
$result = Model::with([
'relation' => function($query) use($relation_sort){
$query->orderBy('relation_column', $relation_sort);
},
'relation.nested' => function($query) use($nested_sort){
$query->orderBy('nested_relation_column', $nested_sort);
}
])->whereHas('relation', function($query){
//Relation exists check.
$query->where('price', '>', 100);
})->whereHas('relation.nested', function($query) use($search_param){
//Nested Relation search.
$query->where('search_column', 'LIKE', $search_param);
})->get();
朋友们, 我的第一个 post,搜索并尝试不同的解决方案和方法 - 最后在这里结束询问。
我有一个包含多个相关表的数据库。客户有一个位置,该位置有多个设置(生命周期,例如计划、构建、运行),每个设置都有不同的电路。基本上:
客户->位置->设置->线路
现在我想要一个包含设置和电路信息的位置列表,其中选择了电路供应商。
如何使用 eloquent 编写此查询?到目前为止,这是我尝试过的方法,但它似乎忽略了 "where supplier" 子句...
$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 方法也能顺利运行:
扩展位置模型:
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();
谢谢大家!
您可以使用预加载嵌套关系查询。
示例:
$relation_sort = 'asc';
$nested_sort = 'desc';
$result = Model::with([
'relation' => function($query) use($relation_sort){
$query->orderBy('relation_column', $relation_sort);
},
'relation.nested' => function($query) use($nested_sort){
$query->orderBy('nested_relation_column', $nested_sort);
}
])->whereHas('relation', function($query){
//Relation exists check.
$query->where('price', '>', 100);
})->whereHas('relation.nested', function($query) use($search_param){
//Nested Relation search.
$query->where('search_column', 'LIKE', $search_param);
})->get();