【发布时间】:2018-08-27 20:26:38
【问题描述】:
我有一个集合,我需要按总数排序(从最低到最高),如果客户没有总数 (-),请将其放在有总数的客户下方。
该集合返回以下内容:
我的意图是实现下一个结果(首先是有总数的客户,然后是没有总数的客户):
$sales = Sale::with('client')
->get()
->map(function($sale){
$sale['total'] = $sale->total ? $sale->total * $sale->quantity : '--';
return $sale;
});
我尝试使用sortBy('total'),但它对我不起作用。
解决方案:
$sales = Sale::with('client')
->get()
->map(function($sale){
$sale['total'] = $sale->total ? $sale->total * $sale->quantity : '--';
return $sale;
})
->sort(function($a, $b) {
if ($a->total == "--" && $b->total != "--") {
return 1;
}
if ($a->total != "--" && $b->total == "--") {
return -1;
}
if ($a->total == "--" && $b->total == "--") {
return 0;
}
return $a->total - $b->total;
});
感谢您的帮助。问候
【问题讨论】:
-
orderByRaw('-total DESC') 试试这个
-
我在集合中使用“map”创建的“total”字段,因此我不能使用 orderBy。谢谢。
-
你能告诉我们你的表(哪些字段)
sales和表clients的样子吗?
标签: php laravel sorting collect