Использование метода сравнения 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));