Laravel:渴望加载特定的列
Posted
技术标签:
【中文标题】Laravel:渴望加载特定的列【英文标题】:Laravel: Eager loading specific columns 【发布时间】: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')
【参考方案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。以上是关于Laravel:渴望加载特定的列的主要内容,如果未能解决你的问题,请参考以下文章