2016-05-31 3 views
0

У меня есть пользователи таблицы и сводная таблица role_user, не у каждого пользователя есть роль. Мне нужно сделать запрос и получить всех пользователей, а также упорядочить их по ролям, в которых я должен использовать оператор объединения, как бы тогда выглядел этот запрос? Мне нужен подобный запрос к этому, но так, чтобы пользователи с ролями, которые имеют на первом месте, а не те, которые не имеют роли, как сейчас:Laravel заказывать пользователя по ролям

$users = DB::table('users') 
        ->leftJoin('role_user', 'users.id', '=', 'role_user.user_id') 
        ->orderBy('role_id') 
        ->get(); 
+0

Возможно, вы должны предоставить нам дополнительную информацию о том, чего вы хотите достичь. Например, покажите нам, как выглядят ваши таблицы, и тем, что вы хотите заказать. –

+0

Ну, в таблице пользователя есть несколько полей с информацией о пользователе, а затем у меня есть сводная таблица role_user, где я храню роль и идентификатор пользователя для пользователей, у которых есть некоторые роли. В моем запросе я хотел бы получить всех пользователей с ролями или без них и сортировать их по ролям, чтобы пользователи с ролями были первыми, а пользователи без ролей пришли позже. – Marco

ответ

2

Следующий код должен сделать трюк:

$users = DB::table('users') 
    ->leftJoin('role_user', 'users.id', '=', 'role_user.user_id') 
    ->orderBy(\DB::raw('role_id IS NULL')) 
    ->orderBy('role_id') 
    ->get(); 

таким образом, вы будете сортировать по ROLE_ID IS NULL, что будет , если пользователь имеет ROLE_ID набор и , если пользователь не имеет никакой роли, так что пользователи с набор ролей будет идти первым. Затем в каждой группе пользователи будут упорядочены по role_id.

+0

Это почти решение, есть ли способ, я мог бы получить такой результат, но вместо пользователей, перечисленных из ролей, В первую очередь, role_id, пользователи с самой маленькой ролью? – Marco

+0

Я нашел лучший способ, см. Обновленный ответ –

+0

То есть, спасибо! – Marco