You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中如何按日期排序同时将status为Completed的记录排在列表末尾

解决方案

方式1:SQL层面排序(推荐)

直接在查询构造器中新增自定义排序规则,优先按状态优先级排序,再按end_at升序,执行效率更高,适合所有数据量场景:

$this->paperorders = paperorder::with('order', 'client', 'paperorders', 'papers', 'stocks')
    ->orderByRaw("CASE WHEN status = 'Completed' THEN 1 ELSE 0 END ASC")
    ->orderBy('end_at', 'asc')
    ->get();

实现逻辑说明

  • 第一步用CASE WHEN自定义排序权重:status为Completed的记录权重设为1,其余Processing状态的权重设为0,按权重升序排列后所有Processing记录会自动排在Completed记录前面
  • 第二步按end_at升序排列,保证同一状态下的记录按结束日期升序排序,和原有的排序逻辑一致

方式2:集合层面排序(适合小数据集)

如果需要在拿到查询结果集合后再做排序,可直接用Laravel集合的sortBy方法实现:

$this->paperorders = paperorder::with('order', 'client', 'paperorders', 'papers', 'stocks')
    ->get()
    ->sortBy(function ($record) {
        return [
            $record->status === 'Completed' ? 1 : 0,
            $record->end_at
        ];
    });

内容的提问来源于stack exchange,提问作者Madushan Serasinghe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 01:45:00