【问题标题】:Laravel: Eager loading specific columnsLaravel:渴望加载特定的列
【发布时间】:2020-12-05 05:26:14
【问题描述】:

为什么

Order::with(['products'=>function($q){
    $q->select('name', 'price', 'quantity')->orderBy('name','asc');
  }])->paginate($length);

返回所有订单及其各自的产品数据,但是

Order::with(['products'=>function($q){
    $q->select('name', 'price', 'quantity')->orderBy('name','asc');
  }])->select('pickup_date', 'pickup_time', 'remark')->paginate($length);

给我所有我想要的订单数据,但是一个空的产品数组?

我想从 order 表中选择一些特定的列,并从 products 表中选择一些特定的列。我该怎么做?

仅供参考: Orders-products 与模型是多对多的关系: 订购型号:

public function products()
{
    return $this->belongsToMany('App\Models\Product')->withTimestamps();
}

产品型号:

public function orders()
{
  return $this->belongsToMany('App\Models\Order')->withTimestamps();
}

【问题讨论】:

  • 你的选择方法会是这样的select('products.id as product_id', 'pickup_date', 'pickup_time', 'remark')

标签: laravel eloquent eager-loading


【解决方案1】:

你需要这样选择:

Order::with(['products'=>function($q){
    $q->orderBy('name','asc');
  }])->select('products.name as name','products.price as price','products.quantity as quantity','orders.pickup_date as pickup_date', 'orders.pickup_time as pickup_time', 'orders.remark as remark')->paginate($length);

或者没有子查询:

Order::with('products')
   ->select('products.name as name','products.price as price','products.quantity as quantity','orders.pickup_date as pickup_date', 'orders.pickup_time as pickup_time', 'orders.remark as remark')
   ->orderBy('name','asc');
   ->paginate($length);

【讨论】:

    【解决方案2】:

    您缺少一件事,您应该在外部选择中添加产品ID。

    Order::with(['products'=>function($q){
        $q->select('name', 'price', 'quantity')->orderBy('name','asc');
      }])->select('product_id','pickup_date', 'pickup_time', 'remark')->paginate($length);
    

    希望对你有帮助

    【讨论】:

    • 这样我得到一个异常:找不到列:1054 未知列'product_id'。数据透视表中的外键是“product_id”
    • 什么意思?这是一个多对多的关系。 Pivot中的外键是order_id和product_id,分别指向orders.id和products.id。
    猜你喜欢
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 2014-02-24
    相关资源
    最近更新 更多