此查询替换为Laravel。怎么用laravel写?

时间:2019-12-31 06:29:48

标签: laravel

select u.name,GROUP_CONCAT( DISTINCT c.category_name SEPARATOR ',') AS category_name FROM users as u 
INNER JOIN category as c ON FIND_IN_SET(c.id, u.cate) 
GROUP BY u.id

3 个答案:

答案 0 :(得分:0)

尝试如下。

\DB::table('users as u')
    ->join('category as c', function($query) {
        $query->whereRaw("find_in_set(c.id, u.cate)");
    })
    ->select(DB::raw("u.name,GROUP_CONCAT( DISTINCT c.category_name SEPARATOR ',') AS category_name"))
    ->groupBy('u.id')
    ->get();

答案 1 :(得分:0)

 User::with('category'=>function($q){
     $q->select( DB::raw("GROUP_CONCAT( DISTINCT c.category_name SEPARATOR ',') AS category_name"))->whereRaw("find_in_set(c.id, user.cate)")
    })->groupBy("user.id")->get();

或者您可以简单地将其用于任何查询

DB::select( DB::raw("select u.name,GROUP_CONCAT( DISTINCT c.category_name SEPARATOR ',') AS category_name FROM users as u 
INNER JOIN category as c ON FIND_IN_SET(c.id, u.cate) 
GROUP BY u.id));

答案 2 :(得分:0)

使用查询生成器,您可以通过这种方式完成

$data = User::select('users.name')
             ->selectRaw("GROUP_CONCAT( DISTINCT category.category_name SEPARATOR ',') AS category_name")
             ->join('category', 'category.id', '=', 'users.cate')
             ->groupBy('users.name')
             ->get();

使用:

  • selectRaw用于运行纯SQL查询
  • 使用innerJoin链接两个表
  • 使用groupBy对结果进行分组是因为您正在使用GROUP_CONCAT
  • 尽管使用表用户名,但我还是更喜欢调用与它相关的模型名
  • 仅检入示例表AND列名

另一个选择使用Laravel关系,但是为此,您将需要

  • 每个表的模型
  • belongsTohasMany方法是通过您的模型类创建的

您还需要记住吗

  

GROUP BY语句中的每一列都需要SELECT,因为:

  • 这是标准的一部分
  • Laravel启用了严格模式
  • 除MySQL外,如果不这样做,每个SQL引擎都会抛出错误
  • Here the MySQL docs.,因为您的group错误,您可以在此处详细了解