我有一个集合,需要按总计(从最低到最高)进行排序,如果客户没有总计(-),请将其保留在有此总计的客户之下。
该集合返回以下内容:
我的目的是取得下一个结果(首先是拥有总计的客户,然后是没有总计的客户):
Sub filesave()
ActiveWorkbook.SaveAs Filename:="Z:\Henry\test\Book1" _
& Format(Now(), "YYYYMMDD") & ".xlsx"
End Sub
我尝试使用$sales = Sale::with('client')
->get()
->map(function($sale){
$sale['total'] = $sale->total ? $sale->total * $sale->quantity : '--';
return $sale;
});
,但对我来说不起作用。
解决方案:
sortBy('total')
感谢您的帮助。问候
答案 0 :(得分:0)
您只需要按eagerload上的asc顺序订购即可:
execute()
编辑:
$sales = Sale::select('total', 'client_id')
->with(['client'=>function($query){
$query->orderBy('total', 'ASC');
}])
->get();
答案 1 :(得分:0)
我认为如果要订购一个关系,则需要使用SQL“ join”,因为with()将在之后急于加载结果(如果需要急于加载客户端,则仍可以使用with())。
使用JOIN
Sale::select('total', 'client_id')->join( 'client', 'client.sale_id', '=', 'sale.id' )>orderBy( 'client.total', 'ASC' )->get();
不确定外来名称和名称,但您明白了。
使用排序(在您的收藏夹中)
$data->sortBy('client.total');
您应该首选解决方案1(JOIN),因为第二个解决方案需要数据库查询+收集处理。
编辑:您可以执行更复杂的连接语句
Edit2:选中this stack