2017-10-07 5 views
0

Das ist mein ModellLaravel: orderby in verwandter Tabelle und mit

  • Benutzer
  • Rolle

und die Beziehung zwischen diesen Modellen sind viele zu viele.

Ich möchte Abfrage wie folgt erstellen:

return User::with('roles')->orderBy('roles.id')->paginate(); 

Ich will nicht join, weil ich eine Basisklasse für jedes Modell erstellt. Ich möchte auch nicht orderBy nach get verwenden, weil es alle meine Daten laden muss und danach sollte ich in der Lage sein, es zu sortieren und paginieren. Es ist also keine sehr gute Idee.

+0

Ohne einen Beitritt ist es nicht möglich (AFAIK). –

Antwort

0
User::where('role_id','!=','0')->orderBy('role_id','DESC')->paginate(10); 
+0

Normalerweise ist es besser, eine Lösung zu erklären, anstatt nur einige Zeilen anonymen Codes zu veröffentlichen. Sie können lesen [Wie schreibe ich eine gute Antwort] (https://stackoverflow.com/help/how-to-answer), und auch [Vollständig Code-basierte Antworten zu erklären] (https://meta.stackexchange.com/questions/114762/Erklären-ganz-% E2% 80% 8C% E2% 80% 8Bcode-basierte Antworten). –

1

Sie können so etwas wie dies versuchen:

return User::with(['roles' => function ($query) { 
     $query->orderBy('id', 'desc'); 
    }])->paginate(); 

Aber dies wird nur die eifrigen Laden Attribute bestellen, aber wenn Sie daran interessiert sind beitreten zu verwenden, können Sie so etwas wie dieses:

return User::with('roles') 
    ->join('roles', 'user.id', '=', 'roles.user_id') 
    ->orderBy('roles.id', 'desc') 
    ->paginate(); 

In diesem können Sie leicht paginate verwenden, die Ihr Hauptanliegen ist.

Hoffe, das hilft.