在编写自定义查询时,该查询返回的用户将其帖子分组,并计算其帖子总数。
SQL查询
SELECT users.nameUser, COUNT(posts.namePost) AS Total, GROUP_CONCAT(posts.namePost) AS List
FROM users
JOIN posts ON users.id = posts.user_id
GROUP BY users.nameUser;
+----------+-------+-----------------------+
| nameUser | Total | List |
+----------+-------+-----------------------+
| alfa | 2 | PHP 7,Aire comprimido |
| beta | 2 | HTML 5,MySQL 8 |
+----------+-------+-----------------------+
问题是,如何使用Eloquent Laravel甚至使用查询生成器来构建此查询?
答案 0 :(得分:1)
这只是使用雄辩的ORM以及某些使用Fluent完成任务的方法
$data = User::select('users.nameUser')
->selectRaw('COUNT(posts.namePost) AS Total')
->selectRaw('GROUP_CONCAT(posts.namePost) AS List')
->join('posts', 'users.id', '=', 'posts.user_id')
->groupBy('users.nameUser')
->get();
有用的sutff
- 您可以使用
selectRaw()
方法代替DB::raw()
方法- 我使用
User
模型来避免包含更多的查询构建器代码- 我使用
groupBy()
方法
答案 1 :(得分:1)
您可以将原始查询字符串作为DB语句传递:
$data = DB::statement('
SELECT users.nameUser, COUNT(posts.namePost) AS Total,
GROUP_CONCAT(posts.namePost) AS List
FROM users
JOIN posts ON users.id = posts.user_id
GROUP BY users.nameUser
')->get();