Doctrine orm 如何编写具有多个联接的条令查询?

Doctrine orm 如何编写具有多个联接的条令查询?,doctrine-orm,doctrine,query-builder,doctrine-query,Doctrine Orm,Doctrine,Query Builder,Doctrine Query,我有一个实体人(p),它与实体NotificationType相关的实体通知相关 有些人收到了类型1的通知(通知类型id=1) 有些已收到通知,但不是类型1 有些根本没有收到消息 在全局范围内,我希望检索那些尚未收到类型1消息的人 我写了这个查询: $qb = $this->createQueryBuilder('p') ->leftJoin('p.notifications', 'n') ->leftJoin('p.notification

我有一个实体人(p),它与实体NotificationType相关的实体通知相关

  • 有些人收到了类型1的通知(通知类型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的人,我根本没有得到那些没有收到通知的人

我如何纠正我的疑问以获得这些问题

非常感谢您的帮助

不带空值的NOT IN(对于没有消息的连接)将无法按预期进行解析。对于eq或ne也是如此

尝试:

您也可以将这些作为加入的条件,请参阅《条令守则》的

另外,您可能不需要select,因为您可以通过实体中的getter以编程方式访问这些值

$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();