So sortieren Sie Produkte nach Preis in aufsteigender Reihenfolge. Der Preis wird auf der Grundlage des Preises aus den Modellprodukten multipliziert mit dem Volumen aus dem Modellpaket berechnet. So zeigen Sie alle Produktpreise auf Laravel an.
ceil( ( $product->packs->count() > ? $product->packs->sortBy('pivot.add_time')->first()->volume : 1 ) * $product->price )
Ich habe versucht, diesen Code zu verwenden, habe aber eine Fehlermeldung erhalten.
Undefinierte Eigenschaft: IlluminateDatabaseQueryBuilder::$pack
if ($request->get('sort') == 'sort-price_desc') { $products = Product::orderBy( Funktion ($produkt) { Rückkehrdecke( ($product->packs->count() > 0 ? $product->packs->sortBy('pivot.add_time')->first()->volume : 1) * $Produkt->Preis ); } )->get(); }/span>
由于Laravel的Eloquent ORM的orderBy方法不支持闭包函数作为替代,所以代码是不正确的。相反,它预期将列名和排序方向(升序或降序)作为参数。在您的场景中,您尝试根据一个稍微复杂的计算值对产品进行排序,这不能直接通过使用orderBy来实现。
您可以采用的一种策略是事先计算这个字段并将其存储在产品表中,然后按照该字段进行排序。或者,您可以先检索产品,然后在内存中对它们进行排序。
以下是您可能在内存中执行的方式:
此代码首先检索所有产品及其关联的包装。然后,根据您提供的计算,在内存中对集合进行排序。