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

Laravel 8中如何按日期排序重复展示用户(含创建/更新时间)

在Laravel 8中实现用户创建/更新记录的合并排序展示

方法一:通过集合处理(简单直观)

在控制器中,先获取所有用户,再将每个用户的「创建时间」和「更新时间」拆分为两条独立记录,最后统一按日期排序:

// 控制器代码
use App\Models\User;

public function showUserActivity()
{
    // 获取所有用户
    $users = User::all();

    // 将每个用户拆分为创建、更新两条记录
    $activityLogs = $users->flatMap(function ($user) {
        return [
            [
                'name' => $user->name,
                'action' => 'created at',
                'date' => $user->created_at,
            ],
            [
                'name' => $user->name,
                'action' => 'updated at',
                'date' => $user->updated_at,
            ],
        ];
    })
    // 按日期升序排序
    ->sortBy('date');

    return view('user-activity', compact('activityLogs'));
}

方法二:通过数据库UNION查询(性能更优)

如果用户数据量较大,推荐直接在数据库层面合并并排序,减少PHP端的处理压力:

// 控制器代码
use App\Models\User;
use Illuminate\Support\Facades\DB;

public function showUserActivity()
{
    // 构造创建记录查询
    $createdQuery = User::select(
        'name',
        DB::raw("'created at' as action"),
        'created_at as date'
    );

    // 构造更新记录查询,与创建记录合并
    $activityLogs = User::select(
        'name',
        DB::raw("'updated at' as action"),
        'updated_at as date'
    )
    ->union($createdQuery)
    ->orderBy('date')
    ->get();

    return view('user-activity', compact('activityLogs'));
}

视图中的foreach循环

在Blade视图中,直接遍历处理好的集合即可:

<!-- user-activity.blade.php -->
@foreach($activityLogs as $log)
    {{ $log['name'] }} {{ $log['action'] }} {{ $log['date']->format('Y-m-d') }} ...
@endforeach

如果需要展示时分秒等更详细的日期格式,可修改format()方法的参数,比如'Y-m-d H:i:s'。

内容的提问来源于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:25:30