Laravel:急切加载特定列

Laravel: Eager loading specific columns

为什么

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

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

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

提供我想要的所有订单数据,但产品数组为空?

我想 select 订单 table 中的某些特定列与产品 table 中的某些特定列。我该怎么做?

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

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

产品型号:

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

你需要这样 select :

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

你遗漏了一件事,你应该在外部添加产品 ID select。

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

希望对您有所帮助