2016-09-17 7 views
0

Im den folgenden Fehler erhalten:Eloquent Abfrage auf 2 Tabellen

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'value' in 'where clause' (SQL: select sum(gross) as value, first_name from clients left join transactions on clients . id = transactions . client_id where value > 0 group by first_name)

Aus dieser Funktion?

$data = DB::table('clients')->leftjoin('transactions','clients.id','=','transactions.client_id') 
     ->select(DB::raw('sum(gross) as value, first_name')) 
     ->where('value','>',0) 
     ->groupBy('first_name') 
     ->get(); 

return $data; 

Antwort

0

SQL is evaluated backwards, from right to left. So the where clause is parsed and evaluate prior to the select clause. Because of this the aliasing of sum(gross) to value has not yet occurred.

Aliases can be used in GROUP BY, ORDER BY, or HAVING clauses.

So anstelle von value in denen sum(gross) verwenden Sie bitte, wo wie unten.

$data = DB::table('clients')->leftjoin('transactions','clients.id','=','transactions.client_id') 
     ->select(DB::raw('sum(gross) as value, first_name')) 
     ->where('sum(gross)','>',0) 
     ->groupBy('first_name') 
     ->get(); 

return $data; 
+0

Dank Rahul, ich sehe, wie das funktionieren könnte, indem ich die folgende Fehlermeldung erhalten: –

+1

SQLSTATE [42000]: Syntaxfehler oder Zugriffsverletzung: 1463 Nicht-Gruppierung Feld ‚Wert‘ Klausel (SQL in verwendet wird: wähle sum (brutto) als Wert, Vorname_von_Clients_links Verbinde 'Transaktionen' auf'Clients'.'id' =' Transaktionen'.Client_ID' Gruppe nach 'Vorname' mit' Wert'> 0) –

+0

Bitte check my Aktualisierter Beitrag Tatsächlich können Sie sum (brutto) direkt in where condition statt alias verwenden. Und Entschuldigung für die Idee, die falsch war. Sie können nur Bedingungen für das gruppierte Feld festlegen. –