我在名为downloads
的CakePHP 3应用程序中有一个表,其中有一个名为master
的列。字段类型设置为TINYINT(1)
我可以找到downloads.master == 1
这样的记录:
$query = $this->Downloads->find()->where(['master' => true]);
但是Cake不会让我查询downloads.master !== 1
的地方。这些都不起作用,并且在执行查询时都返回一个空数组/对象:
$query = $this->Downloads->find()->where(['master' => false]);
$query = $this->Downloads->find()->where(['master' => 0]);
$query = $this->Downloads->find()->where(['master' => null]);
$query = $this->Downloads->find()->where(['master' => '']);
你使用什么作为使这成为可能的条件?我的想法是它应该是false
,因为它与true
相反,但与CakePHP 3中的大多数事情一样,他们喜欢使它比必要的更复杂......
我已经使用phpMyAdmin检查了我的表中的记录,确实有两个记录master == 1
和master == null
所以不是返回零结果的情况。
答案 0 :(得分:4)
NULL
的列与0
不一致(即false
- 从boolean
的情况来看,从ORM的角度来看是什么?列类型)。如果要与NULL
进行比较,则必须使用IS NULL
发出查询,这是SQL / DBMS要求,而不是CakePHP要求。
CakePHP要求您明确要做什么,因为传递null
并不一定意味着您要与SQL NULL
进行比较,具体取决于上下文。
长话短说,请使用IS
运算符:
where(['master IS' => null])
另见