Doctrine orm 如何编写具有多个联接的条令查询?
我有一个实体人(p),它与实体NotificationType相关的实体通知相关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
- 有些人收到了类型1的通知(通知类型id=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();