2017-10-16 50 views
0

Laravel Eloquoentに句を結合します:複合体は、私は3つのテーブルを持っている

  • ID
  • C_ID
  • 会社

表C:

  • ID
  • 状態

は今、私はEloquoent関係を使用して、この次のクエリを実行したいです。

select * from A, B, C where A.B_id = B.id and B.C_id = C.id and C.state = 1 

私は、各モデルで関係をdecalredして行い、以下のクエリ:

A::with(['b' => function($query) { 
    $query->with(['C'=> function($q) { 
     $q->where('state', 1); 
    }]); 
}])->get(); 

しかし、私が期待される結果を得ていないのです。

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

+0

あなたの関係をここに記入してください。 –

+1

カンマ結合構文をusng停止しました。 1992 :-( – Strawberry

+0

あなたはどんな結果を得ていますか?データベースにはどのようなデータがありますか? – Jono20201

答えて

0

withをスコープで使用すると、照会している最上位のモデルではなく、関係を絞り込むだけです。あなたは多くの場合、クエリとスコープの両方を行う必要がありますwith

例:

A::query() 
    ->whereHas('b.c', function ($q) { 
     $q->where('state', 1); 
    }) 
    ->with([ 
     'b.c' => function ($q) { 
      $q->where('state', 1); 
     }, 
    ])->get(); 
0

はこれを試してみてください。

->select('A.*', 'B.company', 'C.state') 
:あなたは一例で、あなたが各テーブルのセレクに何をしたいフィールドを指定して selectメソッドで

A::join('B', 'B.id', '=', 'A.B_id') 
->join('C', 'C.id', '=', 'B.C_id') 
->select(...) 
->where('C.state', 1) 
->get(); 

関連する問題