2016-05-19 9 views
1

Ich möchte diese SQL-Anfrage in Query Builder für Laravel 4,2 übersetzen, könnten Sie mir helfen?SQL Abfrage Builder Laravel 4 mit mehreren Tabelle wählen

Vielen Dank im Voraus!

Tabelle api_calls => id | Schlüssel_ID | Server | created_at

Tabelle api_key => id | Schlüssel | created_at

SQL:

SELECT K.key FROM api_key as K 

WHERE 
(SELECT count(id) FROM api_calls WHERE server = $server AND key_id = K.id AND created_at >= $DateSeconds) < 10 

AND 
(SELECT count(id) FROM api_calls WHERE server = $server AND key_id = K.id AND created_at >= $DateMinutes) < 500 

GROUP BY K.key 

Antwort

0

Verwendung verbindet ANG Aggregation wie folgt aus:

DB::table('api_key as K') 
    ->select('K.*') 
    ->join('api_calls as ac1', function ($join) use ($server, $DateSeconds) { 
     $join->on('ac1.server', '=', DB::raw($server)); 
     $join->on('ac1.key_id', '=', 'K.id'); 
     $join->on('ac1.created_at', '>=', DB::raw($DateSeconds)); 
    }) 
    ->join('api_calls as ac2', function ($join) use ($server, $DateMinutes) { 
     $join->on('ac2.server', '=', DB::raw($server)); 
     $join->on('ac2.key_id', '=', 'K.id'); 
     $join->on('ac2.created_at', '>=', DB::raw($DateMinutes)); 
    }) 
    ->having(DB::raw('COUNT(ac1.id)'), '<', 10) 
    ->having(DB::raw('COUNT(ac2.id)'), '<', 500) 
    ->groupBy('K.id') 
    ->get(); 
+0

Danke, testen i, dass morgen, haben einen schönen Tag :) – Matthieu

+0

Hallo, danke für diese Anfrage aber wenn ich das Ergebnis vardump, bekomme ich nichts. Sogar kein Fehler. Irgendeine Idee? – Matthieu

+0

Nun, meiner Meinung nach sollte diese Abfrage funktionieren. Wenn Sie nichts erhalten, bedeutet dies, dass alle Datensätze herausgefiltert wurden. Wenn Sie Laravels Debugbar haben, können Sie überprüfen, was die Ergebnisabfrage ist. Sie können auch versuchen, dies mit 'leftJoin()' (linker äußerer Join) anstatt mit 'join' (innerer Join) zu überprüfen - um zu überprüfen, ob es irgendwelche Ergebnisse gibt. –