2016-06-05 9 views
1

ich meine SQL wollen wie folgt aussehen:Laravel Eloquent: Funktion in where-Klausel

SELECT ptype, sum(money) FROM `payments` WHERE YEAR(created_at) = 2016 GROUP BY ptype 

, mit denen ich zu kämpfen "YEAR (created_at) = 2016" in Laravel Eloquent Query Builder setzen ...

Versuchte verschiedene Möglichkeiten:

$data = \EPA\Models\Payments::where('YEAR(created_at)', '=', intval($period)) 
->groupBy('ptype')->get(); 

und mit DB :: raw:

$data = \EPA\Models\Payments::where(DB::raw('YEAR(created_at)'), '=', intval($period)) 
->groupBy('ptype')->toSql(); 

Was mir Fehler

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'YEAR(created_at)' 
in 'where clause' (SQL: select * from `payments` where `YEAR(created_at)` = 2016 group by `ptype`) 

oder SQL wie gibt:

select * from `payments` where YEAR(created_at) = ? group by `ptype` 

, die auch nicht geeignete Form ich ist, weil dritter Parameter von where-Klausel mit ersetzt wird "?" plötzlich ...

In der Tat, die Probleme sind, dass in einem Fall es entgeht YEAR (...) und MySQL denkt, dass es eine Spalte ist, und in zweiter Linie eloquente Orte "?" statt Jahr.

Kann jemand helfen, diese Where-Klausel mit Funktion in eloquente ... zu integrieren? Was ist der beste Weg, dies zu tun? (Ich brauche es für mein Report-Skript)

+1

'$ data = \ EPA \ Models \ Zahlungen :: whereRaw ("YEAR (created_at) =". Intval ($ period)) -> groupBy ('ptype') -> get(); ' –

+0

OMG! Danke, es funktioniert! –

Antwort

2

Wie Mark Baker in den Kommentaren beantwortet, kann ich "whereRaw" für die Lösung verwenden:

$data = \EPA\Models\Payments::selectRaw('ptype, sum(money)') 
->whereRaw('YEAR(created_at) = '. intval($period)) 
->groupBy('ptype')->get();