Laravel按关系排序

时间:2018-06-13 18:34:33

标签: laravel eloquent relationship

我有一个问题:

 $users =  User::byRole()->inCompany()
        ->with([
            'role'     => function ($q) {
                $q->select('id', 'title')->orderBy('title','DESC');
            },
            'company'  => function ($q) {
                $q->select('id', 'company_name');
            },
            'projects' => function ($q) {
                $q->select('id', 'name');
            },
        ])->select([
            'email',
            'id',
            'company_id',
        ])->paginate();

问题在于它不会被角色标题排序。

我做错了什么?

谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用修改后的withCount()

$users =  User::byRole()->inCompany()
    ->with([
        'role'     => function ($q) {
            $q->select('id', 'title');
        },
        'company'  => function ($q) {
            $q->select('id', 'company_name');
        },
        'projects' => function ($q) {
            $q->select('id', 'name');
        },
    ])->select([
        'email',
        'id',
        'company_id',
    ])->withCount(['role as title' => function ($q) {
        $q->select('title');
    })->orderBy('title', 'DESC')
    ->paginate();

答案 1 :(得分:1)

你也可以像这样使用join

->join('roles','roles.id','user.role_id')
...
...
->orderBy('roles.title', 'DESC')

我希望这会对你有所帮助