我知道条件过滤器尚不可用于查询(根据Doctrine2手册的“已知限制”部分中的“26.1.4。将过滤规则应用于任何查询”),所以我想问专家他们的首选解决以下问题的方法是:
我的网站包含每个都有很多评论的产品对象。评论有一个状态字段。我不想在Doctrine2如此精彩的自动关联过程中不必要地引入尚未批准的评论。
我当前的解决方案/ hack是使用单表继承(STI)和“status”的鉴别器,并且具有ApprovedProductReview,根据状态“APPROVED”扩展ProductReview类
我应该补充一点,我目前只是在打电话
$em->find('Entities\Product', $pid);
获取我的产品,Doctrine2自动完成所有关联。我应该通过提供DQL查询来实例化产品吗?
我真正喜欢的是一种覆盖Doctrine2基于注释提供的魔力的方法,并且只需能够使用DQL懒洋洋地获得正确的评论子集。
建议?
答案 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();