0

我有一个实体 Person (p),它与与实体 NotificationType 相关的实体 Notifications 相关。

  • 有些人收到了类型 1 的通知 (notification_type_id = 1)。
  • 有些已收到通知,但不是类型 1
  • 有些根本没有收到消息。

在全球范围内,我想检索那些尚未收到类型 1 消息的人。

我写了这个查询:

$qb = $this->createQueryBuilder('p')
        ->leftJoin('p.notifications', 'n')
        ->leftJoin('p.notification_type', 'nt')
        ->addSelect(array('p','n','nt'))
        ->where('nt.id NOT IN (1)')
        ->orderBy('p.name', 'ASC');
return $qb->getQuery()->getResult();

但是通过这个查询,我只得到那些收到通知但不是类型 1 的人,我没有得到那些根本没有收到通知的人。

我怎样才能纠正我的查询以获得那些?

非常感谢你的帮助

4

1 回答 1

0

NOT IN 带有空值(对于没有消息的连接)不会像您期望的那样解析。eq 或 ne 也是如此。

尝试:

$qb = $this->createQueryBuilder('p');
$results = $qb->leftJoin('p.notifications', 'n')
              ->leftJoin('p.notification_type', 'nt')
              ->addSelect(array('p','n','nt'))
              ->where('nt.id !=1')
              ->orWhere('nt.id IS NULL')
              ->orderBy('p.name', 'ASC');
return $qb->getQuery()->getResult();  

您也可以将这些作为加入条件,请参阅13.2.5。教义代码的 Expr 类

顺便说一句,您可能不需要 select,因为您可以通过实体中的 getter 以编程方式访问这些值。

于 2012-12-19T18:03:30.310 回答