如何在Laravel中首先按当前登录用户进行排序?

时间:2018-02-19 15:33:49

标签: laravel eloquent

下面的代码是在Job表中按权限划分列表视图。

public function index(Request $request)
{
    $user_name = Auth::user()->name;

    $jobs = Job::orderBy('created_at', 'desc') //@default
    ->where('is_trash', '==', 0)
    ->paginate(15);

    if(!Auth::user()->hasPermissionTo('Admin')){   //check by permission 
    $jobs = Job::orderBy('created_at', 'desc')
    ->where('user_name', '=', $user_name)
    ->where('is_trash', '==', 0)
    ->orderby('updated_at', 'desc')
    ->orderBy('deleted_at', 'desc')
    ->paginate(15);
    }

    return view('jobs.index')
        ->with('jobs', $jobs);
}

例如,当前登录用户名为C,并且有A,B,D用户。 然后我希望将列表显示为

------------------------------
C
A
B
D
------------------------------

如何在列表中首先对当前登录的用户进行排序? 提前谢谢你。:)

2 个答案:

答案 0 :(得分:0)

要在所有其他行上方放置一行,然后按升序/降序排序其余行,您需要执行以下操作SELECT * FROM table ORDER BY field = value ASC

因此,对于您的查询,这样的事情应该起作用

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

$jobs = Job::orderByRaw("user_name = ':name' ASC", ['name' => $user_name])
    ->orderBy('created_at', 'desc')
    ->where('is_trash', '==', 0)
    ->paginate(15);

我不完全确定您要订购哪个查询以及哪个字段,但此示例应该足以让您适应。这是未经测试但如果:name不按照示例工作,请尝试在\DB::raw()中包装查询以添加绑定$user_name

答案 1 :(得分:0)

您可以使用collections。刚刚测试过,效果很好:

list($user, $collection) = $collection->partition(function($user) {
    return $user->id === auth()->id();
});
$collection = $user->merge($collection);