渴望加载条件 - Laravel

时间:2016-11-10 17:36:10

标签: laravel eloquent

我有这个问题:

 $tournament = Tournament::with(
            'championships',
            'championships.settings',
            'championships.category',
            'championships.tree.users',
        )->first();

现在,它给了我所有附加锦标赛的锦标赛。

我需要的是参加锦标赛,但只有锦标赛与$ request->锦标赛相匹配。

当然,我也想在所有其他关系中使用这个过滤器(' championships.settings',' championships.category',' championships.tree.users&#39 ;) 有什么想法吗?

3 个答案:

答案 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');