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');