2017-10-07 7 views
0

Ceci est mon modèleLaravel: Orderby dans le tableau connexe et

  • utilisateur
  • Rôle

et les relations entre ces modèles sont plusieurs à plusieurs.

Je veux créer requête comme ceci:

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

Je ne veux pas join parce que je créé une classe de base pour chaque modèle. Je ne veux pas utiliser orderBy après get car il doit charger toutes mes données et après je devrais pouvoir trier et paginer. Ce n'est donc pas une très bonne idée.

+0

Sans une jointure ce n'est pas possible (AFAIK). –

Répondre

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

Habituellement, il est préférable d'expliquer une solution au lieu de simplement afficher des lignes de code anonyme. Vous pouvez lire [Comment écrire une bonne réponse] (https://stackoverflow.com/help/how-to-answer), et aussi [Expliquer entièrement les réponses basées sur le code] (https://meta.stackexchange.com/questions/114762/explication-entièrement-% E2% 80% 8C% E2% 80% 8Bcode-based-réponses). –

1

Vous pouvez essayer quelque chose comme ceci:

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

Mais cela n'ordonneront les attributs de chargement désireux, mais si vous êtes intéressé à utiliser, vous joindre pouvez avoir quelque chose comme ceci:

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

En cela, vous pouvez facilement utiliser paginate qui est votre principale préoccupation.

Espérons que cela aide.