【问题标题】:how to use GROUP_CONCAT in laravel如何在 laravel 中使用 GROUP_CONCAT
【发布时间】:2016-11-08 11:55:12
【问题描述】:
$assignment = assignment::find(Crypt::decrypt($id));
$assignment_details = $assignment->raw_plan()->groupBy('flag')->get();

我想在 laravel 中关注这个查询的结果

SELECT GROUP_CONCAT(name) AS 'names' FROM `raw_plans` where `assignment_id` = 1 GROUP BY`flag`

请建议我如何在 laravel 中使用 GROUP_CONCAT

【问题讨论】:

    标签: laravel laravel-5.2


    【解决方案1】:

    试试这个

    $sql = "SELECT GROUP_CONCAT(name) AS 'names' FROM `raw_plans` where  `assignment_id` = 1 GROUP BY`flag`";
    
      $info = DB::select(DB::raw($sql));
    

    【讨论】:

      【解决方案2】:

      您可以使用关系作为查询构建器来获取结果:

      $assignment_details = $assignment->raw_plan()
                                      ->select(DB::raw('group_concat(name) as names'))
                                      ->where('assignment_id', 1)
                                      ->groupBy('flag')
                                      ->get();
      

      更新

      在 select 中使用table_name.* 获取所有字段。

      $assignment_details = $assignment->raw_plan()
                                      ->select('raw_plans.*', DB::raw('group_concat(name) as names'))
                                      ->where('assignment_id', 1)
                                      ->groupBy('flag')
                                      ->get();
      

      【讨论】:

      • 但它只显示 $assignment['names']。看不到其他字段。
      • 检查更新的答案。它还会显示其他字段。
      【解决方案3】:

      试试下面的代码

      $data = DB::table('raw_plans')
                  ->select(DB::raw("GROUP_CONCAT(name SEPARATOR '-') as `names`"))
                  ->groupBy('flag')
                 ->where('assignement_id',1)
                  ->get();
      

      【讨论】:

      • 得到以下错误:调用未定义函数 App\Http\Controllers\group_concat()
      • $assignment = assignment::find(Crypt::decrypt($id)); $assignment_details = $assignment->raw_plan()->groupBy('flag')->get();我想在 raw_plans.flag 中使用 GROUP_CONCAT
      • 您的controller 代码,不是其中的一部分。使用pastie/pasetbin或类似服务
      【解决方案4】:

      shoeb 有点对,但是在访问DB:raw() 中的列名之前应该给出表名

      你应该试试这个:

      $data = DB::table('raw_plans')
                  ->select(DB::raw("group_concat(raw_plans.name)"))
                  ->groupBy('flag')
                  ->where('assignement_id',1)
                  ->get();
      

      希望这会有所帮助。

      【讨论】:

      • table name 仅在您加入并且有多个 tables 具有相同 column name 时才需要,我猜
      猜你喜欢
      • 2015-03-24
      • 2011-01-14
      • 2018-10-30
      • 2012-05-20
      • 1970-01-01
      • 1970-01-01
      • 2011-09-13
      • 2012-11-07
      • 1970-01-01
      相关资源
      最近更新 更多