2014-09-15 34 views
5

Si prega di utilizzare group_concat in una query utilizzando query eloquente e non raw.Group_concat - laravel eloquent

Ecco il codice che ho cercato di eseguire e did't lavoro per me:

commands::join('products', 'products.id', '=','commands.idproduct') 
->select('commands.username','**group_concat(products.name)**') 
->group by ('commands. username') 
->get(); 

Grazie in anticipo :)

+0

Provare a utilizzare DB :: RAW() per avvolgere 'raw' SQL che vuoi in una query: '-> seleziona ('commands.username', DB :: raw ('group_concat (products.name)'))' – alexrussell

+0

grazie per la tua risposta @alexrussell ma il problema è che quando aggiungo il DB :: raw e eseguo di nuovo l'applicazione ottengo questo errore: Symfony \ Component \ Debug \ Exception \ FatalErrorException Classe 'Storage \ Commands \ DB' non trovato – user3481058

+0

Ah, sei in un namespace - aggiungi 'use DB;' dopo la dichiarazione del namespace o usa 'DB' nel tuo codice:' \ DB :: raw ('group_concat (products.name)') ' – alexrussell

risposta

10

io uso appena usato DB; e nella mia query ho usato DB :: raw ('group_concat (products.name)') !!

+0

Dovresti segnare questa risposta come risposta corretta in modo che le persone sappiano. – alexrussell

3

Miglior esempio per esso ..

 
ModelName::select('ID', DB::raw('CONCAT(First_Name, " ", Last_Name) AS full_name')) 
      ->get() 
      ->toArray(); 

Result 
    Jon Doe,Jeffery Way,Tailer,taylor otwell 
0

questo ha funzionato per me: (9.0+)

DB::raw('string_agg(products.name, \',\') as products') 

dovrai usare Illuminate \ Support \ Facciate \ DB; per questo.

2

o semplicemente sostituire

->select('commands.username','**group_concat(products.name)**') 

con

->selectRaw('commands.username, **group_concat(products.name)**') 
4

Questo ha funzionato per me

$list = TableName::where('user_id', 'user_001' 
     ->groupBy('user_id') 
     ->groupBy('subscription_id') 
     ->select('user_id','subscription_id','type') 
     ->selectRaw('GROUP_CONCAT(holiday) as holidays') 
     ->get(); 

o

use Illuminate\Support\Facades\DB; 

$sql = 'SELECT GROUP_CONCAT(holiday) as holidays, user_id,subscription_id, type FROM TableName 
     where vendor_id = 'user_001' GROUP BY user_id, subscription_id;'; 
$list = DB::select($sql, []); 
-3

$ data = \ DB :: table ('paging_config') -> leftjoin ('paging_groups', 'paging_config.page_group', '=', 'paging_groups.page_number') -> leftjoin ('spk_mnt', 'paging_groups .ext ',' = ',' spk_mnt.stn_no ') -> selezionare (' paging_config.page_group ',' paging_groups.ext ',' spk_mnt.stn_status ') -> selectRaw (' GROUP_CONCAT (descrizione DISTINCT) come descrizione ') -> dove (' paging_config.page_group', '=', 'paging_config.page_group') -> groupBy ('paging_config.description')

 ->get(); 
+0

Solo il codice non è sufficiente. Raccontaci qualcosa. – kwoxer

Problemi correlati