2014-10-10 11 views
5

Ich versuche, alle Benutzer aus der Tabelle users, die eine bestimmte Gruppe in der Pivot-Tabelle users_groups entsprechen. Ich benutze Sentry 2 von Cartalyst btw.Laravel - Querybuilder mit Join und concat

Dies funktioniert, um alle Benutzer mit ersten und letzten Namen verkettet zu bekommen.

User::select(DB::raw('CONCAT(last_name, ", ", first_name) AS full_name'), 'id') 
     ->where('activated', '=', '1') 
     ->orderBy('last_name') 
     ->lists('full_name', 'id'); 

, wenn ich versuche, es zu ändern auch Benutzer filtern, die zu einer bestimmten Gruppe I einen Syntaxfehler gehören nicht zu bekommen.

User::select(DB::raw('SELECT CONCAT(user.last_name, ", ", user.first_name) AS user.full_name'), 'user.id', 'users_groups.group_id', 'users_groups.user_id') 
         ->join('users_groups', 'user.id', '=', 'users_groups.user_id') 
         ->where('user.activated', '=', '1') 
         ->where('users_groups.group_id', '=', $group) 
         ->orderBy('user.last_name') 
         ->lists('user.full_name', 'user.id'); 

Jeder Schub in die richtige Richtung würde sehr geschätzt werden.

EDIT: Syntaxfehler

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in 
your SQL syntax; check the manual that corresponds to your MySQL server 
version for the right syntax to use near 'SELECT CONCAT(user.last_name, ", ", 
user.first_name) AS user.full_name, `user`.`' at line 1 (SQL: select SELECT 
CONCAT(user.last_name, ", ", user.first_name) AS user.full_name, `user`.`id`, 
`users_groups`.`group_id`, `users_groups`.`user_id` from `users` inner join 
`users_groups` on `user`.`id` = `users_groups`.`user_id` where 
`users`.`deleted_at` is null and `user`.`activated` = 1 and 
`users_groups`.`group_id` = 9 order by `user`.`last_name` asc) 
+0

Können Sie die Syntaxfehler hinzufügen ? –

+0

hat den Fehler zur Frage hinzugefügt. Danke – MDS

Antwort

8

Logans Antwort hat mich in die richtige Richtung gestartet. Ich musste auch alle "Benutzer" entfernen. Präfixe, da es bereits das Benutzermodell angerufen hat, nehme ich an. Diese Abfrage hat funktioniert:

User::select(DB::raw('CONCAT(last_name, ", ", first_name) AS full_name'), 'id') 
         ->join('users_groups', 'id', '=', 'users_groups.user_id') 
         ->where('activated', '=', '1') 
         ->where('users_groups.group_id', '=', $group) 
         ->orderBy('last_name') 
         ->lists('full_name', 'id'); 

Danke an alle! Hoffentlich findet jemand, der in diese Sache eindringt, eine Anleitung zu dieser Frage.

+1

Sie müssen nichts aus der Pivot-Tabelle auswählen. –

+0

Guter Anruf @ JarekTkaczyk. bearbeitete Antwort. – MDS

1

In Ihrem zweiten Beispiel haben Sie DB::raw('SELECT ...'). Sie müssen das Schlüsselwort 'SELECT' entfernen.

0

Mit dem Query Builder können Sie tun:

DB::table('users')->join('...')->where('...') ->lists(DB::raw('CONCAT(firstname, " ", lastname)'), 'id')

6

Sie nicht in DB auswählen müssen :: raw() Siehe das Beispiel

User::select(
      'id', 
      DB::raw('CONCAT(first_name," ",last_name) as full_name') 

     ) 
     ->orderBy('full_name') 
     ->lists('full_name', 'id');