如何将此查询从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();

有用的东西

  1. 您可以使用selectRaw()方法而不是DB::raw()方法
  2. 我使用User模型来避免包含更多的查询构建器代码
  3. 我用groupBy()方法

以上是关于如何将此查询从SQL(mysql)转换为Eloquent(Laravel)的主要内容,如果未能解决你的问题,请参考以下文章

如何将此查询从 MSSQL 转换为 MySQL?

将此 SQL 查询转换为 mongodb 查询 -

如何将此 sql 查询转换为 mongodb?

如何将此 MySQL SELECT 查询转换为 DELETE 查询?

如何将此 SQL 查询转换为 SQLAlchemy

如何将此查询转换为 Hive SQL?