我有这个问题:
$tournament = Tournament::with(
'championships',
'championships.settings',
'championships.category',
'championships.tree.users',
)->first();
现在,它给了我所有附加锦标赛的锦标赛。
我需要的是参加锦标赛,但只有锦标赛与$ request->锦标赛相匹配。
当然,我也想在所有其他关系中使用这个过滤器(' championships.settings',' championships.category',' championships.tree.users&#39 ;) 有什么想法吗?
答案 0 :(得分:11)
您可以像这样使用Constraining Eager Loading
:
$tournaments = Tournament::with(['championships' => function ($query) {
$query->where('something', 'like', '%this%');
},
'championships.settings' => function ($query) {
$query->where('something', 'like', '%this%');
},
...])->get();
希望这有帮助!
答案 1 :(得分:2)
在子查询约束中加载关系:
$tournament = Tournament::with(['championships' => function($query) use ($request) {
return $query->where('id', $request->championshipId)
->with([
'settings',
'category',
'tree.users'
]);
}])->first();
答案 2 :(得分:0)
还有另一种方法, 首先获取数据。
$user = User::all();
然后将条件添加到荷载关系
$user = $user->load('profile');