Mysql
 sql >> Database >  >> RDS >> Mysql

Ordine di Laravel per relazione hasmany

È importante capire come funziona il caricamento ansioso di Laravel. Se desideriamo caricare il tuo esempio, Laravel prima recupera tutti i thread. Quindi recupera tutti i commenti e li aggiunge all'oggetto thread. Poiché vengono utilizzate query separate, non è possibile ordinare i thread in base ai commenti.

Devi invece usare un join. Nota che sto indovinando i nomi delle tue colonne/tabelle in questo esempio.

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

Poiché ti stai unendo, potresti dover specificare manualmente le colonne per selezionare i nomi delle colonne delle tabelle.

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