tengo la siguiente selección
$repairs = DB::select(DB::raw(' select r.id repair_id, w.name, w.surname from repairs r join repair_worker rw on r.id = rw.repair_id join workers w on w.id = rw.worker_id where r.vehicle_id = ? group by w.name, w.surname, r.id '),[$vehicle->id]);
y estoy tratando de obtener w.name
y w.surname
en un campo, separados por una coma, por ejemplo. Hay una función string_agg(column, ',')
pero no tengo suerte para que funcione. Siempre me sale error de sintaxis.
Mi intento:
$repairs = DB::select(DB::raw(' select r.id repair_id, string_agg(w.name, w.surname, ', ') workers from repairs r join repair_worker rw on r.id = rw.repair_id join workers w on w.id = rw.worker_id where r.vehicle_id = ? group by r.id '),[$vehicle->id]);
¿Como lo harias?
Estoy usando el Postgresql 9+ más nuevo
Usa el ||
operador para realizar la concatenación de cadenas, luego agregue este resultado.
$repairs = DB::select(DB::raw(" select r.id repair_id, string_agg(w.name || ' ' || w.surname, ', ') workers from repairs r join repair_worker rw on r.id = rw.repair_id join workers w on w.id = rw.worker_id where r.vehicle_id = ? group by r.id "),[$vehicle->id]);
¿prueba esto?
$repairs = DB::select(DB::raw(" select r.id repair_id, string_agg(concat(w.name, ',',w.surname), ', ') workers from repairs r join repair_worker rw on r.id = rw.repair_id join workers w on w.id = rw.worker_id where r.vehicle_id = ? group by r.id "),[$vehicle->id]);