ApiPlatform: CustomSearchFilter: doctrine генерирует подзапрос для andWhere - PullRequest
0 голосов
/ 16 июня 2020

Я создал 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, подзапрос больше не возникает.

Вы знаете, сделал ли я что-то не так?

Спасибо

...