2014-09-23 57 views
6

我有一个有hasMany('评论')关系的模型发布。我想取所有帖子与评论关系,但只有最新的一个评论每个帖子。因为有数千个帖子,每个帖子都有数千条评论,所以由于性能问题(例如,为每个帖子加载所有评论,然后进行$ post-> comments [0] - > value),这样的选项是不可能的:Laravel中的限制关系

Post::with('comments' => function($query){ 
    $query->orderBy('created_at','desc') 
}); 

我也不能这样做:

Post::with('comments' => function($query){ 
    $query->orderBy('created_at','desc')->limit(1) 
}); 

,因为这是行不通的。

我完全相信我不是唯一一个有这个问题的人,我确实设法找到了一些“解决方案的尝试”,但没有找到一个稳定的工作代码示例。任何人都可以帮忙吗?

+2

http://stackoverflow.com/questions/24343738/getting-just-the-latest-value-on-a-joined-table的重复-with-雄辩#24350807。也请看看这个http://softonsofa.com/tweaking-eloquent-relations-how-to-get-latest-related-model/ – 2014-09-23 21:07:38

+0

辉煌,我今晚会尝试它。如果你想,你可以把它作为答案,以便我可以将它标记为最佳答案:) – 2014-09-24 07:08:06

回答

2

试试这一个: 可以说你已经在你的Post模型上定义了“评论”关系。这是你可以把所有的评论都属于是:

App\Post::all()->comments()->orderBy('comments.created_at')->take(1)->get();