Mysql
 sql >> Base de données >  >> RDS >> Mysql

Ordre Laravel par relation hasmany

Il est important de comprendre comment fonctionne le chargement impatient de Laravel. Si nous chargeons votre exemple avec impatience, Laravel récupère d'abord tous les threads. Ensuite, il récupère tous les commentaires et les ajoute à l'objet threads. Étant donné que des requêtes distinctes sont utilisées, il n'est pas possible de trier les fils de discussion par commentaires.

Vous devez utiliser une jointure à la place. Notez que je devine vos noms de table/colonne dans cet exemple.

$threads = Thread::leftJoin('comment', 'comment.thread_id', '=', 'thread.id')
    ->with('comments')
    ->orderBy('comment.created_at', 'desc')
    ->get();

Puisque vous vous joignez, vous devrez peut-être spécifier manuellement des colonnes pour sélectionner les noms de colonne de vos tables.

$threads = Thread::select('thread.*')->leftJoin('comment', 'comment.thread_id', '=', 'thread.id')
    ->with('comments')
    ->orderBy('comment.created_at', 'desc')
    ->get();