原则连接过滤器



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

我的网站有产品对象,每个都有很多评论。评审有一个状态字段。我不想不必要地把那些在自动关联过程中没有被批准的评论拉进来,而Doctrine2做得非常好。

我目前的解决方案/hack是使用带有"状态"标识符的单表继承(STI),并有一个ApprovedProductReview基于"APPROVED"状态扩展ProductReview类

我应该补充一下,我现在只是打电话
$em->find('EntitiesProduct', $pid);
得到我的产品,Doctrine2会自动进行所有关联。我应该通过提供DQL查询来实例化产品吗?

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

建议吗?

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

$dql = "SELECT p, r
        FROM EntitiesProduct 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();

最新更新