前提・実現したいこと
以下のSQLをクエリビルダで表現したいです。
SELECT * FROM events as e WHERE capacity > (SELECT SUM(adults) + SUM(children) FROM payments WHERE e.id = payments.event_id)
events テーブルのカラム
id, capacity(integer),
payments テーブルのカラム
id, event_id, adults(integer), children(integer)
events テーブルとpayments テーブルは1対多の関係です。
イメージとしましては、
参加者の合計(SUM(adults) + SUM(children))が、定員(capacity)よりも少ないイベントで絞り込むという想定です。
環境
Laravel 6.20.14
試したこと
以下のコードでは、「Column not found」エラーになり、
php
1$events->from('events as e') 2 ->whereRaw('capacity > (SELECT SUM(adults) + SUM(children) FROM payments WHERE e.id = payments.event_id)');
以下のコードでは、SUM()の値が、event に紐づいた payments ではなく全paymentsの合計となってしまい、
php
1$events->whereRaw('capacity > (SELECT SUM(adults) + SUM(children) FROM payments WHERE events.id = payments.event_id)');
以下のコードでは、「Column not found」エラーになってしまいます。
php
1$events->whereHas('payments', function($query) { 2 $query->where('event_id', 'events.id') 3 ->where('events.capacity', '>', $query->sum('adults') + $query->sum('children')); 4});
お手数をおかけしますが、何卒お力添えをいただければ幸いです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。