Использование метода сравнения CDbCriteria Yii с пустыми строками


Я создаю новый Yii CDbCriteria и хочу добавить следующее условие:

$criteria = new CDbCriteria();
$criteria->compare('code', $code);
Однако в моем приложении переменная $code может быть пустой строкой. Я прочитал в документации:

Если значение пустое, то выражение сравнения не будет добавлено к значению условие поиска.

Для меня это нежелательное поведение. Я хочу, чтобы он сравнивался с пустой строкой. Есть ли способ сделать это с помощью compare?

Могу ли я вместо этого также использовать следующий запрос? Это безопасно?

$criteria->addCondition("code = $code");

Если да, то каковы недостатки/Преимущества между compare и addCondition?

1 2

1 ответ:

CDbCriteria::compare() является ярлыком-оболочкой для addCondition (Последний все равно вызывается в его теле). Метод разработан таким образом, что он охватывает наиболее распространенные случаи использования обработки критериев фильтра; именно поэтому он игнорирует "несущественные" входные данные. Поскольку ваш случай находится за пределами покрытой области, вы должны использовать низкоуровневый addCondition, но с изюминкой:

$criteria->addCondition('code = :code');
$criteria->params[':code'] = $code;

Можно также использовать другой метод быстрого доступа:

$criteria->addColumnCondition(array('code' => $code));