如何laravel使用GROUP_CONCAT在laravel

问题描述:

$assignment = assignment::find(Crypt::decrypt($id)); 
$assignment_details = $assignment->raw_plan()->groupBy('flag')->get(); 

我想把这个查询的结果如下如何laravel使用GROUP_CONCAT在laravel

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

请建议我如何使用GROUP_CONCAT在laravel

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

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

更新

使用table_name.*的选择让所有的字段。

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

但它只显示$ assignment ['names' ]。无法看到其他字段。 –

+0

检查更新后的答案。它也会显示其他字段。 –

尝试用下面的代码

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

收到以下错误: 调用未定义功能应用\ HTTP \控制器\ GROUP_CONCAT() –

+0

你能分享你的控制器代码? – shoieb0101

+0

$ assignment = assignment :: find(Crypt :: decrypt($ id)); $ assignment_details = $ assignment-> raw_plan() - > groupBy('flag') - > get(); 我想在raw_plans.flag中使用GROUP_CONCAT –

试试这个

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

    $info = DB::select(DB::raw($sql)); 

shoieb是有点权,但在DB:raw()

访问列名您应该尝试在这之前,你应该给表名:

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

希望这有助于。

+0

'table' name只有在加入时才需要,并且有多个'tables'具有相同的'列名',我猜 – shoieb0101