CakePHP 3如果为null / empty

时间:2017-04-21 13:36:46

标签: php cakephp cakephp-3.0

我在名为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 == 1master == null所以不是返回零结果的情况。

1 个答案:

答案 0 :(得分:4)

NULL的列与0不一致(即false - 从boolean的情况来看,从ORM的角度来看是什么?列类型)。如果要与NULL进行比较,则必须使用IS NULL发出查询,这是SQL / DBMS要求,而不是CakePHP要求。

然而,

CakePHP要求您明确要做什么,因为传递null并不一定意味着您要与SQL NULL进行比较,具体取决于上下文。

长话短说,请使用IS运算符:

where(['master IS' => null])

另见