2016-06-29 17 views
0

Ich habe eine Abfrage wie folgt:Laravel läuft Select Exists Abfragen

$query = "Select EXISTS(SELECT * FROM grp_user AS pivot JOIN groups 
AS g ON pivot.grp_id = g.id JOIN vote ON g.id = vote.grp_id WHERE 
pivot.grp_id = :grp_id AND pivot.user_id = :user_id)"; 

und ich möchte es laufen. so habe ich versucht:

$res = DB::select($query,array("grp_id"=>250,"user_id"=>1)); 

res sollte idealerweise einen Booleschen Wert haben, sondern hat es eine Reihe wie:

[{"EXISTS(SELECT * FROM grp_user AS pivot JOIN groups AS g ON pivot.grp_id = g.id JOIN vote ON g.id = vote.grp_id WHERE pivot.grp_id = ? AND pivot.user_id = ?)":1}] 

Beachten Sie die 1 am Ende, das ist der Wert, ich bin interessiert an (es ist entweder 1 oder 0).

Wie kann ich diese Arbeit machen, oder erreichen Sie das "Laravel" Weg?

+0

Ist es noch ein 'Builder' Objekt? Was bringt das Ergebnis von 'dd ($ res)'? Haben Sie versucht, ein '-> first()' oder '-> get()' an das Ende von '$ res = DB :: select();'? –

+0

ist ein Array. Wenn ich anhänge -> get(), erhalte ich einen Fehler Aufruf an eine Memberfunktion get() für Array –

+0

warum nicht nur SELECT COUNT (*) FROM grp_user AS pivot JOIN Gruppen AS g ON pivot.grp_id = g.id JOIN Abstimmung auf g.id = vote.grp_id WHERE pivot.grp_id =: grp_id UND pivot.user_id =: user_id'? – Alex

Antwort

0

Warum prüft nicht nur, wenn es leer ist oder nicht:

$query = "Select * FROM grp_user AS pivot JOIN groups 
AS g ON pivot.grp_id = g.id JOIN vote ON g.id = vote.grp_id WHERE 
pivot.grp_id = :grp_id AND pivot.user_id = :user_id LIMIT 1"; 

$res = DB::select($query,array("grp_id"=>250,"user_id"=>1)); 

return (count($res) > 0) ? 1 : 0; 
+0

$ res = DB :: select ($ query , array ("grp_id" => 250, "user_id" => 1)) -> get(); löst Fehler Aufruf an eine Memberfunktion get() für Array –

+0

Ich habe meine Antwort bearbeitet. –

+0

wie erwähnt, möchte ich select exists verwenden. ein anderer Vorteil der Verwendung ist, wird es versuchen, abdeckende Indizes zu verwenden, wenn –