Laravel table 加入

Laravel table joins

我正在尝试进行一些 table 连接并需要显示一些 trouble.i 2000 年 4 月之后订购的每件商品的客户完整姓名和职位、商品描述、订购数量。我制作了一个可以工作的 SQL 脚本,但我需要使用 Laravel ORM。

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

我为 tables "Customer"、"Order"

创建了 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;
    }

如果有人能给我指出正确的方向,那就太好了。

您似乎想要获取所有 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();

只要确保如果您在关系中指定了列,那么您会为每个关系选择所有外键或相关列。