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

Laravel 8中如何实现用户记录按created_at与updated_at混合升序排列?

实现方法

要在Laravel 8里实现把users表每条记录输出两次(分别携带created_at和updated_at),并按日期混合升序排列,可以通过unionAll合并两个查询结果的方式来实现,具体代码如下:

方法一:使用查询构造器

// 构造第一个查询:取所有用户,用created_at作为排序日期,标记来源为创建时间
$createdQuery = DB::table('users')
    ->select(
        'id',
        'name',
        'created_at as sort_date',
        DB::raw('"created" as date_source'), // 可选字段,用来区分记录是创建/更新时间
        // 按需添加其他需要的字段,比如email、phone等
    );

// 构造第二个查询:取所有用户,用updated_at作为排序日期,标记来源为更新时间
$updatedQuery = DB::table('users')
    ->select(
        'id',
        'name',
        'updated_at as sort_date',
        DB::raw('"updated" as date_source'),
        // 对应添加其他字段
    );

// 合并两个查询,按统一的sort_date字段升序排序
$finalResults = $createdQuery->unionAll($updatedQuery)
    ->orderBy('sort_date', 'asc')
    ->get();

方法二:使用Eloquent模型(已创建User模型时)

// 基于User模型构造查询
$createdQuery = User::select(
    'id',
    'name',
    'created_at as sort_date',
    DB::raw('"created" as date_source')
);

$updatedQuery = User::select(
    'id',
    'name',
    'updated_at as sort_date',
    DB::raw('"updated" as date_source')
);

// 合并查询并排序
$finalResults = $createdQuery->unionAll($updatedQuery)
    ->orderBy('sort_date')
    ->get();

关键说明

  1. unionAll的作用:和union不同,unionAll不会对结果去重,能保证每条用户记录被输出两次(一次对应created_at,一次对应updated_at)。
  2. sort_date字段:将created_at和updated_at统一重命名为sort_date,合并后直接按该字段排序,就能实现两类日期的混合升序排列。
  3. date_source字段:可选添加,用来区分当前记录的日期是创建时间还是更新时间,不需要的话可以直接删除该字段的查询。
  4. 全字段获取:如果需要获取用户表的所有字段,可把select里的具体字段替换为DB::raw('*'),例如->select(DB::raw('*'), 'created_at as sort_date')。

最终得到的$finalResults就是符合需求的结果集,会按日期从小到大混合展示所有的创建、更新记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:01:18