如何将此查询从SQL(mysql)转换为Eloquent(Laravel)

问题描述 投票:3回答:2

在编写一个自定义查询时,该查询返回用户的帖子分组,并计算他们发布的总帖子数

在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甚至使用查询生成器构建此查询?

laravel laravel-5
2个回答
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();

1
投票

这只是一种方法,使用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()方法
© www.soinside.com 2019 - 2024. All rights reserved.