我有一个实体Person(p),它与实体NotificationType相关的实体通知有关。
在全球范围内,我想检索那些没有收到类型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();
但是通过这个查询,我只收到那些收到通知但没有收到通知的人,我没有收到那些没有收到通知的人。
如何纠正我的查询以获得这些查询?
非常感谢你的帮助
答案 0 :(得分:0)
NOT IN with null值(对于没有消息的连接)将不会按预期进行解析。同样适用于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. The Expr class
顺便说一下,您可能不需要select,因为您可以通过实体中的getter以编程方式访问这些值。