Я создал CustomSearchFilter в ApiPlatform.
В запросе только один фильтр. Для примера я помещаю в фильтр только это:
$queryBuilder->leftJoin($rootAlias . ".contracts", "c");
$queryBuilder->leftJoin( "c.payments", "p");
$queryBuilder->andWhere( "p.id = 140");
Он работает нормально, но запрос, сгенерированный doctrine в профилировщике, выглядит следующим образом.
SELECT
l0_.id AS id_0,
l0_.company AS company_1,
l0_.name AS name_2,
l0_.name2 AS name2_3,
FROM
landlord l0_
LEFT JOIN contract l1_ ON l0_.id = l1_.customer_id
LEFT JOIN payment l2_ ON l1_.id = l2_.contract_id
WHERE
l0_.id IN (
SELECT
l3_.id
FROM
landlord l3_
LEFT JOIN contract l4_ ON l3_.id = l4_.customer_id
LEFT JOIN payment l5_ ON l4_.id = l5_.contract_id
WHERE
l5_.id = 140
)
ORDER BY
l0_.id ASC
сгенерированный запрос должен быть намного проще без подзапроса.
Когда я удаляю один из двух leftJoin или andWhere, подзапрос больше не возникает.
Вы знаете, сделал ли я что-то не так?
Спасибо