2017-04-07 40 views
0

我尝试对每个主题中创建最后一篇文章之日的主题进行排序。 有没有人有任何想法如何做到这一点? 事实上,我恢复了我想要的一切,但没有按照正确的顺序。LARAVEL - 按关系合理排序

一个主题有许多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 ..!”,“[公司] zzzz ..”; 我们可以通过$ sujet-> postes-> last() - > created_at(在截图视图中)了解主题的最后一个答案。

+0

希望能帮助:http://stackoverflow.com/a/19885982/6028607 –

回答

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

THX,但我已经尝试这一点,它不工作$ lesSujets = Sujet ::在哪里( 'jeu_id', $(id)) - > with('postes') - > orderBy('poste.created_at','desc') - > paginate(20); //错误:SQLSTATE [42S22]:Column not found:1054 Champ'poste.created_at'inconnu dans order clause(SQL:select * from'sujets' where'jeu_id' = 1 order by'poste'.'created_at' desc limit 20 offset 0) – emeliku

+0

@emeliku我更正了我的答案,结果证明我的语法错了,请参阅编辑。 –

+0

没有什么改变。我回家 – emeliku