2017-10-29 102 views
1

我試圖做一些表連接,並有一些麻煩。我需要顯示 客戶的完整名稱和標題,項目描述,訂購數量,爲2000年4月以後訂購的每個項目。我做了一個SQL腳本工作,但我需要使用Laravel ORM。Laravel表加入

SELECT `first_name`,`last_name`,o.order_id,`quantity`,`description`,`date_placed` 
FROM `customer` c 
JOIN `order` o 
    ON c.`customer_id` = o. `customer_id` 
JOIN `orderline` ol 
    ON o.`order_id` = ol. `order_id` 
JOIN `item` i 
    ON ol.`item_id` = i. `item_id` 
WHERE `date_placed` > '2000-4-00'; 

我創建了2款對錶 「客戶」, 「訂單」

這裏是我的客戶模型

public function orders(){ 
    return $this->hasMany('App\Order','customer_id'); 
} 

這裏是我的訂單模型

public function orderline(){ 
    return $this->hasMany('App\Orderline','order_id'); 
} 

權現在我能夠得到我的一些數據,但我不覺得這是一個好方法去

$customer = Customer::all(); 
foreach($customer as $input){ 
     $item = Customer::find($input->customer_id)->orders; 
     $name = $input->title . ' ' . $input->first_name . ' ' . $input->last_name; 

     $datePlaced = null; 
     $orderID = null; 
    foreach($item as $value){ 
     $orderID = $value->order_id; 
     $datePlaced = $value->date_placed; 
     $order = Order::find($value->order_id)->orderline; 
    } 

如果任何人都可以指出我會朝好的方向發展。

+0

是什麼問題?有沒有錯誤? –

回答

2

看起來你想要得到所有的Customer s與他們的Order s和OrderLine s?

Customer::with(['order' => function ($query) { 
    $query->where('date_placed', '>=', '2000-04-01')->with('orderline'); 
}])->get(); 

如果要限制對關係的列,你可以...

Customer::with(['order' => function ($query) { 
    $query->select(/* columns */)->where('date_placed', '>=', '2000-04-01') 
      ->with(['orderline' => function ($query) { 
       $query->select(/* columns here */); 
      }]); 
}])->get(); 

只要確保你指定的關係的列,您要選擇所有的外鍵或每個關係的相關列。

+0

太好了。看看Laravel和Eloquent上的一些免費的Laracasts視頻。這會讓你開始學習這些東西。 – tptcat