2015-10-05 89 views
4

加入我有以下表格:Laravel 5.1 - 通過多個表

Customer 
    id 

Order 
    id 
    customer_id 

Order_notes 
    order_id 
    note_id 

Notes 
    id 

如果我想獲得的所有訂單筆記客戶,所以我可以做到以下幾點,我該怎麼辦呢?有沒有辦法在我的模型中定義一個通過多個數據透視表加入客戶來訂購筆記的關係?

@if($customer->order_notes->count() > 0) 
    @foreach($customer->order_notes as $note) 
     // output note 
    @endforeach 
@endif 
+0

你只想要你的模型? – AndreL

+0

不一定,只是想知道最好的方法是 – geoffs3310

回答

0

最後我只是做了以下內容:

class Customer extends Model 
{ 
    public function order_notes() 
    { 
     return $this->hasManyThrough('App\Order_note', 'App\Order'); 
    } 
} 

class Order_note extends Model 
{ 
    public function order() 
    { 
     return $this->belongsTo('App\Order'); 
    } 

    public function note() 
    { 
     return $this->belongsTo('App\Note')->orderBy('notes.id','desc'); 
    } 
} 

然後訪問像這樣的註釋:

@foreach($customer->order_notes as $note) 
    echo $note->note->text; 
@endforeach 
0

怎麼樣'belongsToMany'? 例如像

$customer->belongsToMany('OrderNote', 'orders', 'customer_id', 'id'); 

當然,它會不會直接工作,如果你想獲得訂單對象還(但也許你可以使用withPivot

2

創建您的模型這些關係。

class Customer extends Model 
{ 
    public function orders() 
    { 
     return $this->hasMany(Order::class); 
    } 

    public function order_notes() 
    { 
     // have not tried this yet 
     // but I believe this is what you wanted 
     return $this->hasManyThrough(Note::class, Order::class, 'customer_id', 'id'); 
    } 
} 

class Order extends Model 
{ 
    public function notes() 
    { 
     return $this->belongsToMany(Note::class, 'order_notes', 'order_id', 'note_id'); 
    } 
} 

class Note extends Model 
{ 

} 

您可以使用此查詢得到的關係:

$customer = Customer::with('orders.notes')->find(1); 
+0

我不認爲這是我想要的,因爲這將單獨返回所有訂單,然後記錄每個訂單。我只想要一個代表所有客戶訂單記錄的bug對象 – geoffs3310

+0

這正是@ sumpreto的代碼所做的。你只需要使用'@foreach($ customer-> notes作爲$ notes)',你就可以走了。 – charlesrockbass

+0

@ geoffs3310我在Customer模型下添加了一個方法。還沒有嘗試過,但我認爲它可能工作。 – sumpreto