2016-11-08 19 views
6
$assignment = assignment::find(Crypt::decrypt($id)); 
$assignment_details = $assignment->raw_plan()->groupBy('flag')->get(); 

Chcę następującym wyniku tego zapytania w laraveljak używać GROUP_CONCAT w laravel

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

Proszę zasugerować mi jak używać GROUP_CONCAT w laravel

Odpowiedz

12

można wykorzystywać relacje jako kreator zapytań do pobrania wyniki jako:

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

Aktualizacji

Korzystając table_name.* w wybranych, aby uzyskać wszystkie pola.

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

, ale pokazuje tylko $ assignment [' names ' ]. Nie widzę Inne pola. –

+0

Sprawdź zaktualizowaną odpowiedź. Pokaże również inne pola. –

2

Spróbuj z poniżej kod

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

otrzymuję następujący błąd: wywołanie funkcji niezdefiniowany App \ http \ Kontrolery \ GROUP_CONCAT() –

+0

można udostępnić Ci kontrolera kod? – shoieb0101

+0

$ assignment = assignment :: find (Crypt :: decrypt ($ id)); $ assignment_details = $ assignment-> raw_plan() -> groupBy ('flag') -> get(); Chcę użyć GROUP_CONCAT w raw_plans.flag –

0

Wypróbuj to

$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 jest dość dobrze, ale należy podać nazwę tabeli przed uzyskaniem dostępu do nazwy kolumn w DB:raw()

Powinieneś spróbować tego:

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

Nadzieja to pomaga.

+0

'nazwa tabeli 'jest wymagana tylko jeśli dołączasz i istnieje wiele' tabel' z tą samą 'nazwą kolumny', domyślam się – shoieb0101