Doctrine 2 DQL Query返回已过滤的关联

时间:2012-05-30 14:30:10

标签: php doctrine doctrine-orm

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

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

过去,我使用事件侦听器,闭包和/或过滤迭代器来处理实体上的集合过滤。表现明智这似乎有点多。我知道使用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

0 个答案:

没有答案