如何按价格升序排列产品。价格创建如下:价格从模型产品乘以体积从模型包。这是Laravel上所有产品的价格显示方式
ceil(
(
$product->packs->count() > 0
? $product->packs->sortBy('pivot.add_time')->first()->volume
: 1
) * $product->price
)
字符串
我试着使用这个代码,但错误
未定义属性:Illuminate\Database\Query\Builder::$pack
if ($request->get('sort') == 'sort-price_desc') {
$products = Product::orderBy(
function ($product) {
return ceil(
($product->packs->count() > 0
? $product->packs->sortBy('pivot.add_time')->first()->volume
: 1) * $product->price
);
}
)->get();
}
型
1条答案
按热度按时间tktrz96b1#
代码不正确,因为Laravel的Eloquent ORM的
orderBy
方法没有提供闭包函数作为替代。相反,它预期列名和排序方向(asc或desc)作为参数。在您的场景中,您试图根据计算值对产品进行排序,这稍微复杂一些,不能直接使用orderBy
来完成。您可以采用的策略是预先计算该字段并将其存储在products表中,然后按此进行排序。或者,您可以首先检索产品,然后在内存中对其进行排序。
下面是你在内存中如何做的:
字符串
此代码首先检索所有产品沿着关联的包。然后,它根据您提供的计算对内存中的集合进行排序。