Laravel有很多子查询

时间:2018-02-14 09:21:20

标签: php sql laravel

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

2 个答案:

答案 0 :(得分:2)

你走在正确的道路上,只需纠正一下:

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

您可以在official docs上阅读更多takeorderBy

答案 1 :(得分:0)

我找到了一个解决方法。使用Laravel的reverse功能,我能够获得所需的结果,我需要在该属性上调用reverse

$post->latestComments->reverse()