Milan R Dhameliya
Milan R Dhameliya

Reputation: 89

Order by on relationship field

How can I order a result set by something on its relationship?

I am trying to get the Eloquent equivalent of this:

SELECT * FROM users INNER JOIN roles ON users.role_id = roles.id ORDER BY roles.label DESC
Here is what I am trying (based on the documentation):

$order = 'desc';
$users = User::with(['role' => function ($q) use ($order) {
            $q->orderBy('label', $order);
        }])->paginate(10);

but it doesn't order them properly. What am I doing wrong?

EDIT: Not sure if showing the model relationship is relevant but here it is:

 public function role()
    {
        return $this->belongsTo(Role::class);
    }

Upvotes: 0

Views: 99

Answers (1)

Poldo
Poldo

Reputation: 1932

You should do it with join

User::with('role')->join('role', 'role.id', '=', 'users.id')->orderBy('role.label', $order)->paginate(10);

Upvotes: 1

Related Questions