2017-01-03 77 views
0

我有三個模型,分別是Header,Details,Item。該IDCUSTOMER_ID,則詳細IDheader_id(外鍵),並ITEM_ID(外鍵),並且該項目已ID 。現在,我想使用laravel雄辯的關係來關聯這些表格。我已經能夠做到這一點:雄辯:與laravel中的3個表的關係5

class Details extends Model 
{ 
    public function item() { 
     return $this->belongsTo('App\Item', 'bill_item_id'); 
    } 

    public function header() { 
     return $this->belongsTo('App\Header', 'header_id'); 
    } 
} 

問題是在我的控制器,我想了解細節,但細節沒有customer_id。

$detail = Details::where('customer_id', $id)->get(); 
$detail->load('header', 'item'); 

customer_id字段位於標題模型中。如果我得到所有的細節,它工作正常,但我想獲得特定的客戶。

+0

我認爲你仍然需要聲明關係類型(又名:oneToMany,oneToOne,manyToMany ...)更多信息請查看官方的syte:https://laravel.com/docs/5.3/eloquent-relationships – avilac

回答

2

編寫代碼這樣

$details = Details::with('header')->where('customer_id', $id)->get(); 

OR

$details = Details::with(['header'=>function($query) use ($id){ 
    $query->where('customer_id', $id); 
}])->get() 

這將讓結果對你們的關係依賴。

+0

第二個工作。你能解釋一下代碼嗎?我沒有明白。 –

+0

當然功能獲取字符串作爲函數名稱或數組,其中任何數組的鍵是模型中的函數名稱,第二個參數是一個函數女巫注入當前查詢語句與<$query>參數,並且當您綁定一些條件例如where,order ,...它會將這個條件綁定到你的函數相關的模型上。 對於您的示例,它將綁定App \ Header模型的條件。 –

+0

函數($ query)使用($ id)使$ id在該函數中可用。 –

0

你可以使用凡在現場

詳細::用([ '頭'=>函數($查詢)使用($ ID){$查詢 - >在哪裏( 'CUSTOMER_ID',的$ id);}) - >獲得();