如何将此查询从SQL(mysql)转换为Eloquent(Laravel)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将此查询从SQL(mysql)转换为Eloquent(Laravel)相关的知识,希望对你有一定的参考价值。
在编写一个自定义查询时,该查询返回用户的帖子分组,并计算他们发布的总帖子数
在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甚至使用查询生成器构建此查询?
答案
您可以将原始查询字符串作为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();
另一答案
这只是一种方法,使用Eloquent 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();
有用的东西
- 您可以使用
selectRaw()
方法而不是DB::raw()
方法- 我使用
User
模型来避免包含更多的查询构建器代码- 我用
groupBy()
方法
以上是关于如何将此查询从SQL(mysql)转换为Eloquent(Laravel)的主要内容,如果未能解决你的问题,请参考以下文章