2016-05-31 14 views
0

Ich habe Tabellenbenutzer und Pivot-Tabelle role_user, nicht jeder Benutzer hat eine Rolle. Ich muss eine Abfrage erstellen und alle Benutzer abrufen und nach Rollen ordnen, welche Join-Anweisung ich dann verwenden soll, wie würde dann diese Abfrage aussehen? Ich brauche eine ähnliche Abfrage dazu, aber so, dass die Nutzer mit, dass haben Rollen an erster Stelle und nicht diejenigen, die Rollen haben nicht wie jetzt:Laravel Auftrag Benutzer nach Rolle

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

Vielleicht sollten Sie uns mehr Informationen darüber geben, was Sie erreichen möchten. Zeigen Sie uns beispielsweise, wie Ihre Tabellen aussehen und wie Sie Ihre Ergebnisse bestellen möchten. –

+0

Nun, Benutzer Tabelle hat einige Felder mit Informationen über den Benutzer, und dann habe ich Pivot-Tabelle role_user, wo ich Rolle und Benutzer-ID für Benutzer, die einige Rollen haben, in meiner Abfrage möchte ich alle Benutzer mit oder ohne Rollen und sortiere sie nach Rollen, so dass Benutzer mit Rollen zuerst und die Benutzer ohne Rollen später kommen. – Marco

Antwort

2

Der folgende Code sollte es tun:

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

diese Weise werden Sie zuerst sortieren nach role_id NULL ist, das sein wird, wenn der Benutzer rOLE_ID Satz und , wenn der Benutzer keine Rolle, so dass die Nutzer mit Rollensatz wird zuerst gehen. Dann werden innerhalb jeder Gruppe Benutzer von role_id bestellt.

+0

Das ist fast die Lösung, gibt es einen Weg, könnte ich diese Art von Ergebnis bekommen, habe aber statt Benutzer aus den Rollen mit aufgelistet am besten role_id zuerst, Benutzer mit der kleinsten role_id zuerst? – Marco

+0

Ich habe einen besseren Weg gefunden, siehe aktualisierte Antwort –

+0

Das ist es, danke! – Marco

Verwandte Themen