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