我正在尝试使用Laravel的Eager加载来解决我商店中的N + 1查询问题。
-A产品有多种变体,每种变体都有价格
- 商店页面列出了所有产品及其价格。活跃会员看到折扣价格,因此价格()和regularPrice()。
- 我相信scopeRegularPrice()中的min()和max()没有被正确加载。
使用聚合函数进行预先加载是否有最佳做法?
答案 0 :(得分:0)
你当地的范围应该回归一些东西。所以添加
public function scopeRegularPrice() {
...
return 'something'
}
如果你已经回复了什么,那么抱歉。我在代码中看不到任何return语句。
答案 1 :(得分:0)
范围应该以任何方式返回Querybuilder;
您可能最好将其作为产品型号属性的常规价格;
按价格排序变化关系。 并将此方法添加到产品类。
public function getRegularPriceAttribute() {
$variations = $this->variations;
// Get the live variations by where on collection , not DB query.
$liveVaries = $variations->where('live', true)->all();
// the first is the cheapest because you the variations relation should be orderBy('price')
if (! empty($liveVaries)) return [first($liveVaries)->price, last($liveVaries)->price];
return [first($variations)->price, last($variations)->price];}