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

Laravel中如何将当前登录用户排在列表首位?

在Laravel中实现当前登录用户的Job记录排列表首位

这需求我熟!之前做权限管理类的列表功能时刚好碰到过,Laravel里有两种很实用的实现方式,看你的具体场景选就行:

方案一:数据库层面排序(推荐,适配分页场景)

直接在查询阶段让数据库帮我们完成排序,效率更高,还能完美配合分页功能,最常用的写法是用orderByRaw加条件判断:

use Illuminate\Support\Facades\Auth;
use App\Models\Job;

$currentUser = Auth::user();

$jobs = Job::query()
    // 核心逻辑:给当前用户的记录标记优先级0,其他记录标记1,排序时0会自动排在前面
    ->orderByRaw("CASE WHEN user_name = ? THEN 0 ELSE 1 END", [$currentUser->name])
    ->orderBy('created_at', 'desc') // 这里可以换成你需要的其他排序规则,比如更新时间、ID等
    ->get();

要是你的Job表里存储的是用户ID而非用户名,只需要把user_name换成user_id,对比值改成$currentUser->id就可以了,逻辑完全一致。

方案二:集合层面排序(适合小数据量场景)

如果你的Job数据量不大,也可以先把所有数据查询出来,再用Laravel集合的排序方法处理:

use Illuminate\Support\Facades\Auth;
use App\Models\Job;

$currentUserName = Auth::user()->name;

$jobs = Job::all()
    ->sortBy(function ($job) use ($currentUserName) {
        return $job->user_name === $currentUserName ? 0 : 1;
    })
    ->values(); // 重置集合的键,避免排序后出现非连续的键值影响后续使用

这个方法胜在写法灵活,但数据量大的时候不如数据库层面排序高效,而且如果需要做分页,这种方式就不太适配了,得注意场景。

小提醒

  • 一定要替换代码里的user_name为你Job表中实际存储用户标识的字段名
  • 如果需要多条件排序,在orderByRaw后面继续链式调用orderBy/orderByDesc就能叠加排序规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:13:37