2017-10-29 11 views
1

私はいくつかのテーブル結合を行い、いくつかの問題を抱えています。 お客様の完全な名前とタイトル、アイテムの説明、数量は、2000年4月以降に注文された商品ごとに表示する必要があります。スクリプトは動作しますが、私はLaravel ORMを使用する必要があります。私はここに、テーブル "顧客"、 "注文"Laravelテーブルの結合

のための2つのモデルを作成し

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'; 

は私の顧客モデルここ

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さんのOrderOrderLineの両方を取得したいと思われますか?

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の無料のLaracastビデオをご覧ください。それはあなたにこのことを学ぶ良いスタートを与えるでしょう。 – tptcat

関連する問題