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

Laravel中能否对同一列多次排序?需依次获取两类查询结果

实现两类查询结果的合并输出

你当前的代码逻辑存在问题:两个when条件会同时生效,最终生成的SQL会将两个whereDate条件用AND连接,只会返回startdate等于当天的数据,完全无法实现“依次获取两类查询结果”的需求。

要达成先获取startdate >= 今天的数据(按startdate倒序)、再获取startdate <= 今天的数据(同样按startdate倒序)的目标,可以使用**联合查询(Union)**来实现,具体代码如下:

// 构建第一个查询:筛选startdate大于等于今天的数据,按startdate倒序
$futureBatches = DB::table('batches')
    ->whereDate('startdate', '>=', $todayDate)
    ->orderBy('startdate', 'desc');

// 构建第二个查询:筛选startdate小于等于今天的数据,按startdate倒序
$pastBatches = DB::table('batches')
    ->whereDate('startdate', '<=', $todayDate)
    ->orderBy('startdate', 'desc');

// 合并两个查询,保留各自的结果顺序
$allBatches = $futureBatches->union($pastBatches)->get();

补充说明

  • 如果你使用Eloquent模型操作,只需将DB::table('batches')替换为对应模型的查询构造器,比如Batch::query()。
  • union方法会自动对结果去重(当天的数据会被合并成一条),如果需要保留重复的当天数据(同时出现在两类结果中),请改用unionAll方法。

内容的提问来源于stack exchange,提问作者Shubham Rana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 00:23:15