0

エンティティNotificationTypeに関連するエンティティNotificationsに関連するエンティティPerson(p)があります。

  • タイプ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

null 値を使用した 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 クラス

余談ですが、エンティティのゲッターを介してプログラムでこれらの値にアクセスできるため、選択はおそらく必要ありません。

于 2012-12-19T18:03:30.310 に答える