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

时间:2018-09-21 23:59:49

标签: laravel laravel-5

在编写自定义查询时,该查询返回的用户将其帖子分组,并计算其帖子总数。

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

2 个答案:

答案 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

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

答案 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();