2017-01-24 5 views
0

私はトーナメントテーブルを持っています。Eloquent - 結合テーブルで条件を作成する方法

各トーナメントには多くの選手権があります。

私はそうchampionshipID = 333

と一致トーナメントを取得したい、私はそれを行う:私の関係の1の

$tournament = Tournament::with([ 
      'championships' => function ($query) use ($request) { 
       $query->where('id', '=', 333); 
      }, 
      'championships.settings', 
      'championships.category', 
      'championships.tree.user1', 
      'championships.tree.user2', 
      'championships.tree.user3', 
      'championships.tree.user4', 
      'championships.tree.user5' 
     ])->first(); 

例:

public function settings() 
{ 
    return $this->hasOne(ChampionshipSettings::class); 
} 

を教えてくださいあなたがすべてを必要とするなら、それを投稿する。

しかし、私は1人の熱心なローディング関係を結びつけているので、私はただ1つを得るのではなく、すべてのトーナメントを手に入れます。

私は何が欠けていますか?

答えて

0

私はwhereHas()を探しています。これは、関連するモデルの制約に基づいてモデルをフィルタリングすることを可能にします。クエリの重複を避けるために、関連するモデルを複数回取得する場合は、ネストされた制約のサブクエリも使用する必要があります。

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