Symfony2 - Doctrine DQL - select rows that are not related to another table row
我有两个表
优惠:
1 2 3 | id name 1 offer1 2 offer2 |
要约建议:
1 2 | id offer_id name 1 2 suggestion2 |
在这种情况下,我应该得到没有建议的
到目前为止,我已经尝试过了,但是没有用:
1 2 3 4 5 | $query = 'SELECT o FROM IndexBundle:Offer o '. 'WHERE NOT EXISTS ('. 'SELECT s.offer FROM IndexBundle:OfferSuggestion s '. 'WHERE o.id = s.offer)'; $query = $em->createQuery($query); |
我收到一个错误:
[Semantical Error] line 0, col 91 near 'offer FROM
IndexBundle:OfferSuggestion': Error: Invalid PathExpression. Must be a
StateFieldPathExpression.
有什么想法我想念的吗?
您可以简单地引用对象实例,如下所示:
1 2 3 4 | $query = 'SELECT o FROM IndexBundle:Offer o '. 'WHERE NOT EXISTS ('. 'SELECT s FROM IndexBundle:OfferSuggestion s '. 'WHERE o = s.offer)'; |
您还可以使用querybuilder创建子查询:
例如,仅为了演示如何在select语句中使用子查询select语句,假设我们要查找所有尚未编译地址的用户(地址表中没有记录),该操作如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // GET an ExpressionBuilder instance, so that you $expr = $this->_em->getExpressionBuilder(); // CREATE a subquery IN ORDER TO take ALL address records FOR a specified USER id $sub = $this->_em->createQueryBuilder() ->SELECT('a') ->FROM($this->_addressEntityName, 'a') ->WHERE('a.user = u.id'); $qb = $this->_em->createQueryBuilder() ->SELECT('u') ->FROM($this->_userEntityName, 'u') ->WHERE($expr->NOT($expr->EXISTS($sub->getDQL()))); RETURN $qb->getQuery()->getResult(); |
这项工作:
1 2 3 4 | $query = 'SELECT o FROM IndexBundle:Offer o '. 'WHERE NOT IN ('. 'SELECT s.offer_id FROM IndexBundle:OfferSuggestion s '. 'WHERE o.id = s.offer_id)'; |
我只是在猜测,但是您可以尝试吗?