Использование find и null при ИЛИ других значениях - PullRequest
7 голосов
/ 30 сентября 2010

Я хотел бы отфильтровать определенные поля в моей базе данных, которые имеют значение Null, 0 или ''.К сожалению, использование NULL в состоянии IN не может ничего вернуть ... Я полагаю, что это связано с NULL-сравнениями в SQL, которые оцениваются как 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, '').Однако, если я хочу ИЛИ условие NULL отдельно, я не могу сделать это с синтаксисом массива PHP.Я перезапишу значения.Например:

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

Ошибка.Поиск будет выполняться только для записей NULL, когда значение ключа Model.related_string будет перезаписано.Я застрял писать две находки?

1 Ответ

8 голосов
/ 30 сентября 2010

Просто оберните его в еще один массив:

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

Я бы предположил, что если у вас есть так много разных значений для проверки, вам следует прежде всего подумать о том, чтобы стандартизировать их в одно возможное значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...