Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Laravel-Reihenfolge nach Hasmany-Beziehung

Es ist wichtig zu verstehen, wie das eifrige Laden von Laravel funktioniert. Wenn wir Ihr Beispiel eifrig laden, holt Laravel zuerst alle Threads. Dann ruft es alle Kommentare ab und fügt sie dem Thread-Objekt hinzu. Da separate Abfragen verwendet werden, ist es nicht möglich, Threads nach Kommentaren zu ordnen.

Sie müssen stattdessen einen Join verwenden. Beachten Sie, dass ich in diesem Beispiel Ihre Tabellen-/Spaltennamen errate.

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

Da Sie beitreten, müssen Sie möglicherweise manuell Spalten angeben, um die Spaltennamen Ihrer Tabellen auszuwählen.

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