Laravel hasMany sub-query



我有一个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);
  }

您在正确的路径上,只需稍微纠正一点:

public function latestComments($limit = 3)
{
     return $this->hasMany(Comment::class)     
        ->orderBy('id', 'desc')
        ->take($limit);
}

您可以在官方文档

上阅读更多takeorderBy

我找到了工作。使用Laravel的reverse功能,我能够获得所需的结果,我需要做的就是在属性上调用reverse

$post->latestComments->reverse()

最新更新