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

Laravel中按created_at与delivery_from排序结果不符的解决方法

问题分析与解决方案

嘿,我一眼就瞅出问题所在啦!你想要的是先按created_at升序(更早的订单排在前面),同一日期内再按delivery_from升序,但当前代码里给created_at用了desc(降序),这直接把日期晚的订单顶到前面去了,完全和你的预期反着来。

修正后的代码

把created_at的排序方向改成asc就搞定了:

$store = auth('manager')->user->store;
$orders = $store->orders()
    ->orderBy('created_at', 'asc') // 这里从desc改成asc
    ->orderBy('delivery_from', 'asc')
    ->get();

为什么这样改?

  • 第一个orderBy('created_at', 'asc')会先把所有订单按创建日期从早到晚排序(比如10/10/2018的订单会排在15/10/2018的前面)
  • 第二个orderBy('delivery_from', 'asc')会在同一个创建日期的订单组内,按配送起始时间从早到晚排序(比如同一日期下10:00的订单会排在12:00之前)

执行这个代码后,查询结果就会和你给出的预期示例完全一致:

delivery_from: 10:00, created_at: 10/10/2018
delivery_from: 12:00, created_at: 10/10/2018
delivery_from: 09:00, created_at: 15/10/2018
delivery_from: 15:00, created_at: 15/10/2018

额外小提示

你的created_at是Laravel默认的timestamp类型(包含日期和具体时间),如果业务里需要只按日期部分排序(忽略时分秒),可以用数据库函数处理一下:

->orderBy(DB::raw('date(created_at)'), 'asc')

不过看你的示例只展示了日期,默认的created_at升序已经能满足需求,除非同一日期内有不同时间的订单需要忽略时间维度排序。

内容的提问来源于stack exchange,提问作者Paul Diamant

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:22:21