Symfony2 - Doctrine DQL - select 行与另一个 table 行无关
Symfony2 - Doctrine DQL - select rows that are not related to another table row
我有两个表 Offer
和 OfferSuggestion
,它们有 FOREIGN_KEY
并且与 Offer
相关。我想获取尚未与 OfferSuggestion
.
的任何行相关的 Offer
行
报价:
id name
1 offer1
2 offer2
报价建议:
id offer_id name
1 2 suggestion2
在这种情况下我应该得到 offer1
没有建议。
到目前为止我已经试过了,但没有用:
$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.
知道我遗漏了什么吗?
这个有用吗:
$query = 'SELECT o FROM IndexBundle:Offer o '.
'WHERE NOT IN ('.
'SELECT s.offer_id FROM IndexBundle:OfferSuggestion s '.
'WHERE o.id = s.offer_id)';
我只是猜测,你可以试试吗?
您可以简单地引用对象实例如下:
$query = 'SELECT o FROM IndexBundle:Offer o '.
'WHERE NOT EXISTS ('.
'SELECT s FROM IndexBundle:OfferSuggestion s '.
'WHERE o = s.offer)';
您还可以使用查询生成器创建子查询:
作为示例,仅用于演示如何在 select 语句中使用子查询 select 语句,假设我们要查找所有尚未编译地址的用户(不存在记录)在地址 table):
// 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();
我有两个表 Offer
和 OfferSuggestion
,它们有 FOREIGN_KEY
并且与 Offer
相关。我想获取尚未与 OfferSuggestion
.
Offer
行
报价:
id name
1 offer1
2 offer2
报价建议:
id offer_id name
1 2 suggestion2
在这种情况下我应该得到 offer1
没有建议。
到目前为止我已经试过了,但没有用:
$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.
知道我遗漏了什么吗?
这个有用吗:
$query = 'SELECT o FROM IndexBundle:Offer o '.
'WHERE NOT IN ('.
'SELECT s.offer_id FROM IndexBundle:OfferSuggestion s '.
'WHERE o.id = s.offer_id)';
我只是猜测,你可以试试吗?
您可以简单地引用对象实例如下:
$query = 'SELECT o FROM IndexBundle:Offer o '.
'WHERE NOT EXISTS ('.
'SELECT s FROM IndexBundle:OfferSuggestion s '.
'WHERE o = s.offer)';
您还可以使用查询生成器创建子查询:
作为示例,仅用于演示如何在 select 语句中使用子查询 select 语句,假设我们要查找所有尚未编译地址的用户(不存在记录)在地址 table):
// 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();