我想过滤数据库中Null,0或''的某些字段。 不幸的是,在IN条件下使用NULL无法返回任何内容......我相信这是由于SQL中的NULL比较评估为UNKNOWN。例如:
$filterField = $this->Model->find('list', array(
'fields' => array('id','name'),
'recursive' => 0,
'conditions' => array('Model.related_string' => array(Null, 0, '')),
'order' => array('Model.name ASC')
)
);
这始终不返回任何错误和零行,因为生成的查询具有SELECT ... WHERE 'Model'.'related_string' IN (NULL, 0, '')
。但是,如果我想单独OR OR条件,我似乎无法使用PHP的数组语法。我会覆盖这些值。例如:
$conditions['OR'] = array(
'Model.related_string' => array('', 0),
'Model.related_string' => NULL);
失败。这将仅在覆盖“Model.related_string”键的值时搜索NULL条目。我是不是写了两个发现?
答案 0 :(得分:8)
将它包装在另一个数组中:
$conditions['OR'] = array(
array('Model.related_string' => array('', 0)),
array('Model.related_string' => NULL)
);
我建议如果你有许多不同的值来测试,你首先要考虑的是将它们标准化为一个可能的值。