usdglander
@usdglander
Yipee-ki-yay

Как написать «левый» и «правый» LIKE в ActiveQuery Yii2?

Добрый день.
У меня очень тупой вопрос, но в гугле описывается только Yii1, а на Yii2 не работает.
$users = \common\models\User::find()->filterWhere(['like', 'username', '89'])->all();

Формирует что то типа:
...`username` LIKE '%89%'...
А мне нужно
...`username` LIKE '89%'...
Как это сделать в Yii2?
Заранее спасибо!
  • Вопрос задан
  • 20384 просмотра
Решения вопроса 2
Akdmeh
@Akdmeh
PHP, Yii2, Music
www.yiiframework.com/doc-2.0/yii-db-query.html#whe...

For example, ['like', 'name', '%tester', false] will generate name LIKE '%tester'.
То есть, нужно просто написать ['like', 'username', '89%', false]

Вывод - внимательно читайте документацию.
Ответ написан
@dev-sasha
"Обычный" LIKE:
User::find()->andWhere(['like', 'username', '89'])->all();
// SQL: `username` LIKE '89'


Левый/Правый/Обычный LIKE (осторожно, возможны SQL-инъекции)
User::find()->andWhere(['like', 'username', '%89', false])->all();
User::find()->andWhere(['like', 'username', '89%', false])->all();
User::find()->andWhere(['like', 'username', '%89%', false])->all();


Левый/Правый/Обычный LIKE (Без SQL-инъекций, то есть входные значения $str будут обработаны )
User::find()->andWhere([new \yii\db\Expression('username LIKE :param', [':param' => '%' . $str]),])->all();
User::find()->andWhere([new \yii\db\Expression('username LIKE :param', [':param' => $str . '%']),])->all();
User::find()->andWhere([new \yii\db\Expression('username LIKE :param', [':param' => '%' . $str . '%']),])->all();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы