使用条件的急切加载 - Laravel

20

我有这个查询:

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

目前,它为我提供了所有附加冠军赛的锦标赛。

我所需要的是获取锦标赛,但只有与我拥有的$request->championshipId相匹配的冠军赛。

当然,我还希望在所有其他关系中应用此过滤器('championships.settings', 'championships.category','championships.tree.users')

3个回答

49

您可以像这样使用限制预加载

$tournaments = Tournament::with(['championships' => function ($query) {
    $query->where('something', 'like', '%this%');
},
'championships.settings' => function ($query) {
    $query->where('something', 'like', '%this%');
},
...])->get();

@JuliatzindelToro - 如果这个回答对您有帮助,请接受并点赞此回答... 这会激励我回答其他类似的问题 :D,也有助于社区快速获得最佳答案... - Saumya Rastogi

11

在子查询约束中加载关系:

$tournament = Tournament::with(['championships' => function($query) use ($request) {
    return $query->where('id', $request->championshipId)
        ->with([
            'settings',
            'category',
            'tree.users'
        ]);
}])->first();

1

还有另一种方法来完成这个任务,首先获取数据。

$user = User::all();

然后添加加载关系的条件。
if(condition){

     $user->load('profile')
}

或者您可以使用WHEN来有条件地加载关系数据。

$doctors = new Doctor();

    $doctors->with( 'subSpeciality' )
            ->when( $searchKey, function ( $query ) use ( $searchKey ) {
               return $query->where( 'name', 'like', "%$searchKey%" )
                            ->orwhere( 'code', 'like', "%$searchKey%" )
                            ->orwhere( 'sfdc_code','like',"%$searchKey%" );
            } );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接