我有一个laravel hasMany关系,我想从表中获取最后10条评论并按降序排序。 这就是我的表格的样子
id | user_id | comment_text
----------------------------------------------------------
1 30 foo
2 23 bar
3 17 hello
4 30 world
5 12 lorem
6 10 ipsum
7 17 dummy
我的结果应该是
id | user_id | comment_text
----------------------------------------------------------
5 12 lorem
6 10 ipsum
7 17 dummy
我如何运行查询以获得预期结果
SELECT * FROM (
SELECT * FROM comments ORDER BY id DESC LIMIT 3
) sub
ORDER BY id ASC
如何在laravel模型中执行此操作?我可以在关系中运行子查询吗?这是我到目前为止的实现
public function latestComments($limit = 3)
{
return $this->hasMany(Comment::class)
->orderByDesc('id')
->limit($limit);
}
答案 0 :(得分:2)
你走在正确的道路上,只需纠正一下:
public function latestComments($limit = 3)
{
return $this->hasMany(Comment::class)
->orderBy('id', 'desc')
->take($limit);
}
您可以在official docs上阅读更多take
和orderBy
答案 1 :(得分:0)
我找到了一个解决方法。使用Laravel的reverse
功能,我能够获得所需的结果,我需要在该属性上调用reverse
。
$post->latestComments->reverse()