Sql 带聚合函数的即时加载

Sql 带聚合函数的即时加载,sql,laravel,eloquent,laravel-5.3,eager-loading,Sql,Laravel,Eloquent,Laravel 5.3,Eager Loading,我正在尝试使用Laravel的急切加载来解决我的商店中的N+1查询问题 -一个产品有很多变化,每个变化都有一个价格 -商店页面列出了所有产品及其价格。活动成员看到折扣定价,因此价格()和regularPrice() -我认为scopeRegularPrice()中的min()和max()没有正确加载 使用聚合函数进行即时加载是否有最佳实践? 产品模型 控制器 叶片输出 查询结果(通过Blackfire调试工具) 您的本地作用域应该返回一些内容。所以加上 public function sco

我正在尝试使用Laravel的急切加载来解决我的商店中的N+1查询问题

-一个产品有很多变化,每个变化都有一个价格

-商店页面列出了所有产品及其价格。活动成员看到折扣定价,因此价格()和regularPrice()

-我认为scopeRegularPrice()中的min()和max()没有正确加载

使用聚合函数进行即时加载是否有最佳实践?

产品模型

控制器

叶片输出 查询结果(通过Blackfire调试工具)


您的本地作用域应该返回一些内容。所以加上

public function scopeRegularPrice() {
    ...
    return 'something'
}

如果你已经退回了一些东西,那么很抱歉。我在代码中看不到任何return语句

范围应以任何方式返回Querybuilder

您可能会更好地使其正常的价格作为属性的产品模型

按价格订购变更关系。 并将此方法添加到product类

 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];}

我上传了带有返回值的完整函数。我早些时候就把它剪掉了,以免引起混乱。(我想问题是因为我在scopeRegularPrice()中调用了min()和max())什么是
scopeRegularPrice()
返回的?阵列?另外,当您进行比较时,如果($product->price!=$product->REQUALARPRICE()),请尝试执行
if
。价格上没有括号。除非
price
是一个函数而不是一个属性。