我的產品表包含這些資料
| ID | 姓名 | 價格 | 打折后價格 |
|---|---|---|---|
我想使用 laravel eloquent 對表格產品進行排序。discounted_price 為 0,然后排序適用于價格。discounted_price 不為 0,然后排序適用于 discounted_price。
uj5u.com熱心網友回復:
您可以使用 Eloquentget()方法簡單地檢索所有專案。之后,遍歷集合并在每次迭代時檢查是否discounted_price為!= 0. 如果條件為真,只需將一個名為的新專案附加final_price到集合中,其值為discounted_price。否則,將final_price與price.
最后,使用sortBy()方法對集合進行排序final_price
$products = Product::get();
foreach($products as $product) {
if($product->discounted_price != 0) {
$product->final_price = $product->discounted_price;
} else {
$product->final_price = $product->price;
}
}
return $products->sortBy(['final_price','asc']);
關于集合排序的進一步參考 - https://laravel.com/docs/9.x/collections#method-sortby
uj5u.com熱心網友回復:
你可以這樣做 :
$products = Product::all();
return $products->map(function ($product) {
$isDiscountPrice = $product->discounted_price !== 0;
$product->final_price = $product->{$isDiscountPrice ? 'discounted_price' : 'price'};
return $product;
})->sortBy(['final_price','asc']);
在這種情況下,map()Laravel Collection 將是一個很好的解決方案!
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/461715.html
上一篇:使用sql,根據條件查找上一行
