2012-12-19 32 views
0

我有一个与实体相关的实体Person(p)与实体NotificationType相关的通知。如何用多个连接编写这个原则查询?

  • 有些人已经收到类型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类,我没有收到那些没有收到通知的人。

我该如何纠正我的查询有那些?如您所愿

非常感谢您的帮助

回答

0

没有与空值(您加入其中没有消息)将无法解析。对于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不谈,你也许并不需要,因为你可以选择通过实体中的获取者以编程方式访问这些值。