Doctrine加入过滤器

时间:2011-04-19 03:14:20

标签: doctrine-orm

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

我的网站包含每个都有很多评论的产品对象。评论有一个状态字段。我不想在Doctrine2如此精彩的自动关联过程中不必要地引入尚未批准的评论。

我当前的解决方案/ hack是使用单表继承(STI)和“status”的鉴别器,并且具有ApprovedProductReview,根据状态“APPROVED”扩展ProductReview类

我应该补充一点,我目前只是在打电话
$em->find('Entities\Product', $pid);
获取我的产品,Doctrine2自动完成所有关联。我应该通过提供DQL查询来实例化产品吗?

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

建议?

1 个答案:

答案 0 :(得分:3)

您可以在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();