前提・実現したいこと
クラブの定期サービスを利用している人の、滞納金データが正しく記録されているか検証しようとしています
成功失敗を含む、全決済記録を残しているPayLogテーブルの正しく決済できた合計金額
滞納金を記録したDelinquencyテーブルの合計金額
これを足した合計が、(ユーザーが加入しているプランの金額 ✖️ 加入期間) の合計とイコールになるか計算しようとしています
レコード数が多いので、cakephpで計算するのではなくクエリで計算しようと思っています
現在「PayLogテーブルの正しく決済できた合計金額」と「Delinquencyテーブルの合計金額」の計算で詰まっています
発生している問題・エラーメッセージ
「PayLogテーブルの正しく決済できた合計金額」、これは正しく計算できていました
「Delinquencyテーブルの合計金額」はこのユーザーの場合1000円です。親テーブルが出力された分だけこちらも出力されてしまっています
["customer"]=> string(32) "cus_aaabbbccc" ["plAmoun"]=> string(5) "18000" ["dAmount"]=> string(5) "18000" ["Delinquency"]=> array(1) { ["pay_customer_id"]=> string(32) "cus_aaabbbccc" }
該当のソースコード
$query = $this->PayLog->find(); $query->join([ 'table' => 'recurring_billing', 'alias' => 'RecurringBilling', 'type' => 'INNER', 'conditions' => 'PayLog.recurring_billing = RecurringBilling.Pay_recurring_billing_id' ]); $query->join([ 'table' => 'delinquency', 'alias' => 'Delinquency', 'type' => 'INNER', 'conditions' => 'PayLog.customer = Delinquency.Pay_customer_id' ]); $query->where([ 'PayLog.error_code is null', 'PayLog.recurring_billing is not null', 'RecurringBilling.recurring_billing_status_id !=' => 3 ]); $query->select([ 'PayLog.customer', 'plAmoun' => 'sum(PayLog.amount)', 'Delinquency.Pay_customer_id', 'dAmount' => 'sum(Delinquency.amount)' ]); $query->group([ 'PayLog.customer', 'Delinquency.Pay_customer_id' ]); $result = $query->limit(100); foreach($result as $v){ var_dump($v); exit; }
where句の条件について
'PayLog.error_code is null',
決済が失敗していないこと
'PayLog.recurring_billing is not null',
定額サービスに加入済みであること
'RecurringBilling.recurring_billing_status_id !=' => 3
定額サービスを解約していないこと
・・・・
ログイン中のユーザーなどのように特定のIDがわかっているわけではないもので、複数のテーブルを集計しなければならない場合どのような手法を使うことが一般的でしょうか?
補足情報(FW/ツールのバージョンなど)
cakephp3
Mysql