私はこのエンティティを持っています:
Invoice hasMany PlannedCharge
PlannedCharge hasMany PartialCharge
次のSQLと同様に、請求書が完全に支払われているかどうかを知る必要があります。
SELECT
Invoice.id
FROM
webfactory_sale_invoices Invoice
AND
0 <>
((SELECT
SUM(PlannedCharge.ammount)
FROM
webfactory_sale_planned_charges PlannedCharge
WHERE
PlannedCharge.invoice_id = Invoice.id
GROUP BY Invoice.id) - IFNULL((SELECT
SUM(PartialCharge.ammount)
FROM
webfactory_sale_planned_charges PlannedCharge
INNER JOIN
webfactory_sale_partial_charges PartialCharge ON PlannedCharge.id = PartialCharge.planned_charge_id
WHERE
PlannedCharge.invoice_id = Invoice.id
GROUP BY Invoice.id), 0))
ここで、次の方法でクエリビルダーを介してDQLに変換します。
$qb->andWhere($qb->expr()->neq(0, $qb->expr()->diff(
$qb->select('SUM(PlannedCharge.ammount)')
->from('WebFactorySaleBundle:PlannedCharge', 'PlannedCharge')
->where("PlannedCharge.invoice = {$invoiceAlias}")
->groupBy($invoiceAlias)
,
$qb->select('SUM(PartialCharge.ammount)')
->from('WebFactorySaleBundle:PlannedCharge', 'PlannedCharge')
->innerJoin('WebFactorySaleBundle:PartialCharge', 'PartialCharge')
->where("PlannedCharge.invoice = {$invoiceAlias}")
->groupBy($invoiceAlias)
)
));
エラーメッセージが表示されます:致命的なエラー:「100」の最大関数ネストレベルに達し、中止しました!
このクエリを作成するにはどうすればよいですか?