Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Ordem Laravel por relacionamento com muitos


É importante entender como funciona o carregamento antecipado do Laravel. Se carregarmos seu exemplo rapidamente, o Laravel primeiro buscará todos os threads. Em seguida, ele busca todos os comentários e os adiciona ao objeto threads. Como são usadas consultas separadas, não é possível ordenar os tópicos por comentários.

Você precisa usar uma junção em vez disso. Observe que estou adivinhando seus nomes de tabela/coluna neste exemplo.
$threads = Thread::leftJoin('comment', 'comment.thread_id', '=', 'thread.id')
    ->with('comments')
    ->orderBy('comment.created_at', 'desc')
    ->get();

Como você está ingressando, talvez seja necessário especificar colunas manualmente para selecionar os nomes das colunas de suas tabelas.
$threads = Thread::select('thread.*')->leftJoin('comment', 'comment.thread_id', '=', 'thread.id')
    ->with('comments')
    ->orderBy('comment.created_at', 'desc')
    ->get();