У меня есть две красноречивые модели Threads
and Comments
, каждая тема имеет много комментариев.
При перечислении потоков мне нужно упорядочить потоки с помощью create_at по убыванию. Итак, мне нужно отсортировать потоки, created at
в Comments
.
По-видимому, нотация точек не помогает при упорядочении этого способа, как правильно упорядочить потоки?
$Threads= Thread::all()->orderBy("comment.created_at","desc")
Важно понять, как работает Laravel с нетерпением. Если мы хотим загрузить ваш пример, Laravel сначала извлекает все потоки. Затем он извлекает все комментарии и добавляет их в объект потоков. Поскольку используются отдельные запросы, невозможно упорядочить потоки комментариями.
Вместо этого вам нужно использовать соединение. Обратите внимание, что в этом примере я предполагаю имена ваших таблиц и столбцов.
$threads = Thread::leftJoin('comment', 'comment.thread_id', '=', 'thread.id') ->with('comments') ->orderBy('comment.created_at', 'desc') ->get();
Поскольку вы присоединяетесь, вам может потребоваться вручную указать столбцы, чтобы выбрать имена столбцов таблиц.
$threads = Thread::select('thread.*')->leftJoin('comment', 'comment.thread_id', '=', 'thread.id') ->with('comments') ->orderBy('comment.created_at', 'desc') ->get();