現在LaravelのクエリビルダでSQLを作成していますが、実行できず困っています。原因がわからずご教授いただければと思います。
###したいこと
売上のテーブルsalesはpayment(支払い方法),price(売上金額)をカラムを持っています。
①paymentが9以外で取引日が指定の期間で抽出(サブクエリ部分)
②サブクエリを基にpaymentでgroup byとして支払い方法ごとの件数、売上金額の合計を算出
という集計をしたいので集計クエリ作成しました。
###エラー
しかしこのクエリが生のSQLなら実行できるのですが、Laravelのクエリの記法にしてLaravelで実行するとエラーになってしまいます。
〇作成した生のクエリ
SQL
1SELECT payment, count(payment) AS num, sum(price) AS total FROM 2(SELECT * from `sales` where deal_date between '2021-03-28' and '2021-03-29' and payment not in (9)) AS sub 3GROUP BY payment;
〇Laravelのクエリビルダで作成したクエリ
Laravel
1 public static function getTotal() 2 { 3 $from = Carbon::yesterday('Asia/Tokyo'); 4 $to = Carbon::today('Asia/Tokyo')->subSecond(); 5 $sub_query = Sales::whereBetween('deal_date', [$from, $to]); 6 ->whereNotIn('payment', [9])->toSql(); 7 8 $total_data = DB::table(DB::raw('('. $sub_query .') AS sub')) 9 ->selectRaw('payment, count(payment) AS num, sum(price) AS total') 10->groupBy('payment')->get(); 11 12 } 13
〇Laravelのエラー
LaravelException
1Illuminate\Database\QueryException 2SQLSTATE[HY000]: General error: 2031 (SQL: SELECT payment, count(payment) AS num, sum(price) AS total from (select * from `sales` where `deal_date` between ? and ? and `payment` not in (?)) AS sub group by `payment`)
###確認したこと
・生のクエリは実行でき、期待するレコードが取得できる。
・Laravelのクエリビルダで$sub_query単体の実行は確認できる。しかし$sub_queryを$total_dataに組み込むと上記のエラーになる。
・エラーに記載されているSQL文をプレイスホルダーを埋めて、直接DBで実行すると実行できる。(これも疑問です)
他に必要に情報があればお申し付けください。
回答1件
あなたの回答
tips
プレビュー