1

我有一个与 PartyContact 具有一对多双向关联的实体 Party。我正在尝试编写 DQL 语句以在使用对象水合时返回过滤的 PartyContact 集合。我可以使用数组水合返回所需的结果,但是当我尝试返回纯对象水合时,我会收到整个集合。

总共有 5 个 PartyContact 实例与 Party(id 为 1)关联,并且与此 Party 实例关联的 5 个 PartyContact 实例中有 3 个具有名为 type 的属性,其值为PartyContact::TYPE_HOME; 所以我应该能够返回一个 Party具有 3 个 PartyContact 实例的过滤集合的实例。

过去,我使用事件侦听器、闭包和/或过滤器迭代器来处理对实体集合的过滤。性能方面,这似乎有点多。我知道带有 Doctrine 2.2 的新过滤器,但希望能够在我的存储库中的 DQL 中处理这个问题。

仅供参考,我正在使用 2.2.0-BETA2(注意:刚刚检查过这个,我知道已经发布了 2.2.2,所以我现在就试试)

我有以下dql:

$query = $this->_em->createQuery("SELECT p, c FROM Test\Party p LEFT JOIN p.contactMechanisms c WITH c.type = :type WHERE p.id = :id");
$query->setParameter('type', PartyContact::TYPE_HOME);
$query->setParameter('id', 1);
$query->setFetchMode("Test\Party", "contactMechanisms", "EAGER");
$results = $query->getResult(Query::HYDRATE_ARRAY);
$party = $results[0];

我的结果如下:

  • 使用 Query::getResult(Query::HYDRATE_ARRAY) 时:
count($party['contactMechanisms']) = 3
  • 使用 Query::getResult(Query::HYDRATE_ARRAY) 时:
$party->getContactMechanisms()->count() = 5
4

0 回答 0