簡體   English   中英

Doctrine2 QueryBuilder NOT IN語句不起作用

[英]Doctrine2 QueryBuilder NOT IN statement not working

在doctrine查詢構建器和NOT IN語句中遇到一些問題

我有四列和一些數據的表:

id | directory_id| user_id | role_id

1    1              10     null
2    1              5      null
3    1              null   1
4    1              7      null

我想選擇不在兩個給定數組中的所有字段。

$userIds = [10, 5];
$roleIds = [1];

我的查詢:

$this->createQueryBuilder('da')
     ->where('da.directory = :directory')
     ->andWhere('da.user NOT IN (:userIds)')
     ->andWhere('da.role NOT IN (:roleIds)')
     ->setParameters([
         'directory' => $directory,
         'userIds' => $userIds,
         'roleIds' => $roleIds,
      ])
      ->getQuery()
      ->getResult();

據我所知,它應該返回我的最后一行(#id 4),但事實並非如此。

也許有人知道什么是錯的?

不幸的是,與NULL值的比較總是導致UNKNOWN ,這是一個假值。
已在第四行執行的語句如下:

(1 <> 10 AND 1 <> 5) AND (NULL <> 1)

這導致以下結果,並且是一個虛假的結果

(TRUE AND TRUE) AND (UNKNOWN)

要測試NULL值,必須使用IS NULLIS NOT NULL 以下查詢應該有效:

$this->createQueryBuilder('da')
    ->where('da.directory = :directory')
    ->andWhere('(da.user NOT IN (:userIds) OR da.user IS NULL)')
    ->andWhere('(da.role NOT IN (:roleIds) OR da.role IS NULL)')
    ->setParameters([
        'directory' => $directory,
        'userIds' => $userIds,
        'roleIds' => $roleIds,
    ])
    ->getQuery()
    ->getResult();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM