使用laravel按数字排序集合,然后按空数字排序

时间:2018-08-27 20:26:38

标签: php laravel sorting collect

我有一个集合,需要按总计(从最低到最高)进行排序,如果客户没有总计(-),请将其保留在有此总计的客户之下。

该集合返回以下内容:

paragraph output

我的目的是取得下一个结果(首先是拥有总计的客户,然后是没有总计的客户):

enter image description here

    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')

感谢您的帮助。问候

2 个答案:

答案 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