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
相关产品推荐
相关产品推荐

