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

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

$criteria = new CDbCriteria();
$criteria->compare('code', $code);

Однако в моем приложении переменная $code может быть пустой строкой. Я прочитал в документации:

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

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

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

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

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

2

Решение

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

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

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

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

Другие решения

Других решений пока нет …