我知道条件过滤器尚不可用于查询(根据 Doctrine2 手册已知限制部分中的“26.1.4. Applying Filter Rules to any Query”),所以我想问问专家他们对以下问题是:

我的网站有产品对象,每个对象都有很多评论。评论有一个状态字段。我不想在 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();

关于doctrine-orm - Doctrine 连接过滤器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5711207/

10-16 18:18