[英]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 NULL
或IS 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.