2016-11-08 421 views
6
$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

回答

12

您可以使用關係作爲查詢構建器以獲取結果:

$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

檢查更新後的答案。它也會顯示其他字段。 –

2

嘗試用下面的代碼

$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 –

0

試試這個

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

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

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