2017-10-16 50 views
0

我有三個表:A,B & C.複雜的聯接子句中Laravel Eloquoent

表A:

  • ID
  • B_ID

表B :

  • 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

我們停止使用逗號連接語法ca. 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') 

A::join('B', 'B.id', '=', 'A.B_id') 
->join('C', 'C.id', '=', 'B.C_id') 
->select(...) 
->where('C.state', 1) 
->get(); 
選擇方法你可以指定你想每個表的選擇素哪一個領域,通過實例