Doctrine orm 条令连接筛选器

Doctrine orm 条令连接筛选器,doctrine-orm,Doctrine Orm,我知道条件过滤器还不能用于查询(根据Doctrine2手册“已知限制”部分中的“26.1.4.将过滤器规则应用于任何查询”),因此我想问问专家,他们对以下问题的首选解决方案是什么: 我的网站有产品对象,每个对象都有很多评论。审查有一个状态字段。我不想不必要地引入那些在Doctrine2的自动关联过程中未被批准的评论 我目前的解决方案/技巧是使用单表继承(STI)和“状态”的鉴别器,并让ApprovedProductReview基于“APPROVED”状态扩展ProductReview类 我应该补

我知道条件过滤器还不能用于查询(根据Doctrine2手册“已知限制”部分中的“26.1.4.将过滤器规则应用于任何查询”),因此我想问问专家,他们对以下问题的首选解决方案是什么:

我的网站有产品对象,每个对象都有很多评论。审查有一个状态字段。我不想不必要地引入那些在Doctrine2的自动关联过程中未被批准的评论

我目前的解决方案/技巧是使用单表继承(STI)和“状态”的鉴别器,并让ApprovedProductReview基于“APPROVED”状态扩展ProductReview类

我应该补充一点,我现在只是打电话
$em->find('Entities\Product',$pid)

要获取我的产品,Doctrine2会自动执行所有关联。我应该通过提供DQL查询来实例化产品吗

我真正想要的是一种覆盖Doctrine2基于注释提供的魔力的方法,并且能够简单地使用DQL惰性地获得正确的评论子集


建议?

您可以使用DQL中的
WITH
语句:

$dql = "SELECT p, r
        FROM Entities\Product p
        LEFT JOIN p.reviews r WITH r.status = :status
        WHERE p.id = :id"

$q = $em->createQuery($dql);
$q->setParameter('id', $id);
$q->setParameter('status', $status);
$product = $q->getSingleResult();

我以前的解决方案是按照手册使用闭包设置
filter()
数组集合
,但我觉得这是浪费——检索所有额外数据只是为了在php端过滤掉。有没有办法使用像这样的DQL查询来覆盖“魔力”Doctrine2在设置关联时使用的是什么?我现在明白了——这取代了我以前用来创建产品的“find()”。谢谢罗约卡!