Использование метода сравнения CDbCriteria Yii с пустыми строками
Я создаю новый Yii CDbCriteria и хочу добавить следующее условие:
$criteria = new CDbCriteria();
$criteria->compare('code', $code);
Однако в моем приложении переменная $code может быть пустой строкой. Я прочитал в документации:
Если значение пустое, то выражение сравнения не будет добавлено к значению условие поиска.
Для меня это нежелательное поведение. Я хочу, чтобы он сравнивался с пустой строкой. Есть ли способ сделать это с помощью compare?
Могу ли я вместо этого также использовать следующий запрос? Это безопасно?
$criteria->addCondition("code = $code");
Если да, то каковы недостатки/Преимущества между compare и addCondition?
1 ответ:
CDbCriteria::compare()является ярлыком-оболочкой дляaddCondition(Последний все равно вызывается в его теле). Метод разработан таким образом, что он охватывает наиболее распространенные случаи использования обработки критериев фильтра; именно поэтому он игнорирует "несущественные" входные данные. Поскольку ваш случай находится за пределами покрытой области, вы должны использовать низкоуровневыйaddCondition, но с изюминкой:$criteria->addCondition('code = :code'); $criteria->params[':code'] = $code;Можно также использовать другой метод быстрого доступа:
$criteria->addColumnCondition(array('code' => $code));