And*_*ndy 0 php cakephp query-builder cakephp-3.x
我在 CakePHP 3 应用程序中有一个表,downloads其中有一个名为master. 字段类型设置为TINYINT(1)
我可以找到任何这样的记录downloads.master == 1:
$query = $this->Downloads->find()->where(['master' => true]);
Run Code Online (Sandbox Code Playgroud)
但是 Cake 不会让我查询 where 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' => '']);
Run Code Online (Sandbox Code Playgroud)
你用什么作为条件来使这成为可能?我的想法是应该是false因为这true与 .
我已经使用 phpMyAdmin 检查了我的表中的记录,master == 1并且确实有两个记录在哪里,master == null所以它不是要返回零结果的情况。
列存在NULL与存在不同0(即false,在boolean-ish 列类型的情况下,从 ORM 的角度来看是-ish)。如果您想与 进行比较NULL,那么您必须使用 发出查询IS NULL,这是 SQL/DBMS 要求,而不是 CakePHP 要求。
但是 CakePHP 要求您具体说明您想要做什么,因为传递null不一定意味着您要与 SQL 进行比较NULL,具体取决于上下文。
长话短说,使用IS运算符:
where(['master IS' => null])
Run Code Online (Sandbox Code Playgroud)
同样IS NOT用于否定条件。您还可以将用户输入作为值传递,ORM 将测试该值并将IS和IS NOT运算符分别转换为=和!=,以防null传递非值。
也可以看看
| 归档时间: |
|
| 查看次数: |
848 次 |
| 最近记录: |