LARAVEL - Сортировать по уместности отношений

Я пытаюсь отсортировать темы с момента создания последнего поста в каждой теме. У кого-нибудь есть идеи, как это сделать? На самом деле я выздоравливаю все хорошо, что я хочу, но не в правильном порядке.

Одна тема имеет много постов и одна пост принадлежит одной теме.

*: topic = sujet в коде. themes = lesSujets.

$lesSujets = Sujet::where('jeu_id', $idJeu)->paginate(20); 

@foreach ($lesSujets as $sujet)
        <tr>

            <td><a href="{{route('sujet.show', $sujet->id)}}">{{$sujet->titre}}</a></td>
                ...
        </tr>

Скриншот: Форум

Я бы хотел, чтобы темы сортировались по последнему ответу. Порядок должен быть следующим: "ваша лучшая карта", "тест 1", "ааааа..!", "[Фирма] zzzz .."; Мы можем узнать последний ответ по теме с помощью $sujet->postes->last()->creation_at (в виде скриншота).

1 ответ

Вы можете использовать нетерпеливую загрузку, чтобы использовать orderBy() с отношениями. Я не совсем уверен в вашей схеме базы данных, но, говоря по-французски, я просто попытаюсь привести вам пример, который соответствует и имеет смысл с тем, что вы нам дали;-)

$sujets = Sujet::where('jeu_id', $idJeu)->with('poste')->orderBy('post.date', 'desc')->get();

Это должно получить все ваши "sujets", и будет стремиться загрузить его "poste", что делает возможным ваш заказ по любому из свойств "poste".

РЕДАКТИРОВАТЬ: я был не прав, вот правильный синтаксис:

$sujets = Sujet::where('jeu_id', $idJeu)->with(['poste' => function ($query) {
    $query->orderBy('created_at', 'desc');
}])->get();

РЕДАКТИРОВАТЬ 2: Я думаю, что я неправильно понял, что вы искали сначала, как насчет этого? Просто убедитесь, что вы проверяете имена отношений в моем коде, чтобы они действительно походили на ваши, но в конце концов я протестировал их на каком-то фиктивном коде, и он работает.

$sujets = Sujet::where('jeu_id', $idJeu)
->with(['poste'])->get()
->sortByDesc('poste.created_at');
Другие вопросы по тегам