2016-11-10 58 views
1

我有这个疑问:有条件预先加载 - Laravel

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

眼下,它给了我所有附带冠军巡回赛。

我需要的是获得锦标赛,但只有锦标赛匹配$ request-> championshipId,我有。

当然,我也想在所有其他关系('championships.settings','championships.category','championships.tree.users') 任何想法吗?

回答

3

您可以使用Constraining Eager Loading这样的:

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

希望这有助于!

+0

它似乎是工作! TX! –

+0

@JuliatzindelToro - 如果这可以帮助你得到正确的答案,那么请接受&upvote这个答案......这激励我回答这样的其他问题:D并帮助社区快速获得最佳答案...... –

2

负载子查询约束关系:

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