LARAVEL - 按关系适当排序

时间:2017-04-07 11:40:45

标签: laravel sql-order-by relation

我尝试从创建每个主题的最后一篇文章之日起对主题进行排序。 有谁知道怎么做? 实际上我恢复了我想要的一切,但不是以正确的顺序。

一个主题有很多poste和一个poste属于一个主题。

*:代码中的topic = sujet。 topics = 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>

截图: forum

我希望通过上次回复对主题进行排序。 订单应该是:“你最好的卡”,“测试1”,“aaaaa ..!”,“[Firm] zzzz ..”; 我们可以通过$ sujet-&gt; postes-&gt; last() - &gt; created_at(截图视图)知道主题的最后一个答案。

1 个答案:

答案 0 :(得分:0)

您可以使用预先加载来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');