2016-11-10 3 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してください...これは私にこのような他の質問に答える動機となります。 –

2

ロードサブクエリの制約での関係は:

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