如何在 Eloquent/Laravel 上查询子查询

Posted

技术标签:

【中文标题】如何在 Eloquent/Laravel 上查询子查询【英文标题】:How to make querys from subqueries on Eloquent/Laravel 【发布时间】:2014-05-12 05:42:46 【问题描述】:

我有一个名为 posts 的表和另一个名为 users 的表。表posts有一个字段user_id。

我需要获取最后三个注册用户的最后一个帖子。我尝试过这样的事情:

Post::with('user')->groupBy('user_id')->orderBy('id','desc')->take(3)->get();

结果接近我需要的,但不完全是,因为我正在获取最后三个注册用户的第一个帖子。

因此,我需要知道如何使用 Eloquent 制作这样的东西:

SELECT * FROM (SELECT * FROM posts ORDER BY id DESC)sub GROUP BY user_id LIMIT 3;

我不想使用原始查询,因为如您所见,我也需要检索 User 对象。

【问题讨论】:

【参考方案1】:

您也可以使用原始查询并检索用户对象

Post::with('user')
->from(DB::raw('(SELECT * FROM posts ORDER BY id DESC)sub'))
->groupBy('user_id')->take(3)->get();

【讨论】:

以上是关于如何在 Eloquent/Laravel 上查询子查询的主要内容,如果未能解决你的问题,请参考以下文章

php [Eloquent CheatSheet] Eloquent #laravel #eloquent的常见查询方法

我想将 MySQL 查询转换为 Laravel Eloquent / Laravel ORM

Eloquent Laravel 按相关模型排序分页查询

相关模型 eloquent laravel 中的自定义查询

将 Sql 查询转换为 Eloquent Laravel 5.6

GroupBy() 覆盖我的选择语句 Eloquent Laravel