在对其他值进行OR运算时使用find和null

时间:2010-09-29 22:44:18

标签: cakephp

我想过滤数据库中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条目。我是不是写了两个发现?

1 个答案:

答案 0 :(得分:8)

将它包装在另一个数组中:

$conditions['OR'] = array(
    array('Model.related_string' => array('', 0)),
    array('Model.related_string' => NULL)
);

我建议如果你有许多不同的值来测试,你首先要考虑的是将它们标准化为一个可能的值。