【发布时间】:2018-07-24 19:25:45
【问题描述】:
我有一个 laravel hasMany 关系,我想从表中获取最后 10 个 cmets 并按降序排列它们。 这就是我的桌子的样子
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);
}
【问题讨论】:
-
为什么不需要子查询。
-
@LeoinstanceofKelmendi 为什么?我已经编辑了代码以显示我的预期结果
-
使用范围
https://laravel.com/docs/5.6/eloquent#local-scopes -
@sammyukavi 您可以使用 btl 或我的解决方案,btl 答案被认为是一种更好的做法
-
我很欣赏这些解决方案,但没有一个能达到预期的效果。