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

