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

Mic*_*ael 7 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') 
     )
  );
Run Code Online (Sandbox Code Playgroud)

这始终不返回任何错误和零行,因为生成的查询具有SELECT ... WHERE 'Model'.'related_string' IN (NULL, 0, '').但是,如果我想单独OR OR条件,我似乎无法使用PHP的数组语法.我会覆盖这些值.例如:

          $conditions['OR'] = array(
             'Model.related_string' => array('', 0),
             'Model.related_string' => NULL);
Run Code Online (Sandbox Code Playgroud)

失败.这将仅在覆盖"Model.related_string"键的值时搜索NULL条目.我是不是写了两个发现?

dec*_*eze 8

只需将其包装在另一个数组中:

$conditions['OR'] = array(
    array('Model.related_string' => array('', 0)),
    array('Model.related_string' => NULL)
);
Run Code Online (Sandbox Code Playgroud)

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