2016-05-19 9 views
1

laravel 4.2のクエリビルダーでこのSQLリクエストを翻訳したいと思いますか?複数のテーブルを選択してビルダーlaravel 4を照会するSQL

ありがとうございます!

テーブルapi_calls => id | key_id |サーバー| created_at

表api_key => id |キー| 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 

答えて

0

使用はそのようなANG凝集を結合します

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

は、こんにちは、良い一日を:) – Matthieu

+0

、私は明日テストします、ありがとうこのリクエストありがとうございましたしかし、私が結果をvardumpするとき、私は何も得られない。どんなエラーでもない。何か案が? – Matthieu

+0

私の意見では、このクエリはうまくいくはずです。あなたが何も得られないならば、それはすべてのレコードが除外されたことを意味します。 LaravelのDebugbarをお持ちの場合、結果クエリが何であるかを確認することができます。また、 'join'(内部結合)の代わりに' leftJoin() '(左外部結合)を使ってこの結果をチェックすることもできます。 –

関連する問題