首页 > 解决方案 > ApiPlatform : CustomSearchFilter : 学说为 andWhere 生成子请求

问题描述

我在 ApiPlatform 中创建了一个 CustomSearchFilter。

查询中只有一个过滤器。例如,我只把这个放在过滤器中:

$queryBuilder->leftJoin($rootAlias . ".contracts", "c");
$queryBuilder->leftJoin( "c.payments", "p");
$queryBuilder->andWhere( "p.id = 140");

它工作正常,但探查器中的学说生成的查询如下。

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 之一时,就没有更多的子查询了。

你知道我做错了什么吗?

谢谢

标签: phpsymfonysymfony4api-platform.com

解决方案


推荐阅读