Вот мой код
Код: Выделить всё
$test = '0380_20';
$search = Unloading::find()
->Where(['like', 'ARTICUL', $test])
->all();
print_R($search);
%0380_20%
%0380%_%20%
Ничего не выходит...
Код: Выделить всё
$test = '0380_20';
$search = Unloading::find()
->Where(['like', 'ARTICUL', $test])
->all();
print_R($search);
gbushmakin писал(а): ↑2019.10.05, 11:16 Пробовал так же разные вариации:
%0380_20%
%0380%_%20%
Ничего не выходит...
Код: Выделить всё
$test = '0380_20';
$search = Unloading::find()
->Where("ARTICUL LIKE '$test'")
->all();
print_R($search);
Код: Выделить всё
$test = '%0380_20%';
Сработало. Спасибо. Но а как тогда быть, если это массив с различными значениями? Всё к тому же ARTICUL. В документации было описание этой возможности:yiiliveext писал(а): ↑2019.10.05, 11:41Если это часть текста, то соответственноКод: Выделить всё
$test = '0380_20'; $search = Unloading::find() ->Where("ARTICUL LIKE '$test'") ->all(); print_R($search);
Код: Выделить всё
$test = '%0380_20%';
Когда диапазон значений задан в виде массива, несколько LIKE утверждений будут сформированы и соединены с помощью AND. Например, ['like', 'name', ['test', 'sample']] сформирует name LIKE '%test%' AND name LIKE '%sample%'
gbushmakin писал(а): ↑2019.10.05, 11:58 Сработало. Спасибо. Но а как тогда быть, если это массив с различными значениями? Всё к тому же ARTICUL. В документации было описание этой возможности:Когда диапазон значений задан в виде массива, несколько LIKE утверждений будут сформированы и соединены с помощью AND. Например, ['like', 'name', ['test', 'sample']] сформирует name LIKE '%test%' AND name LIKE '%sample%'
Код: Выделить всё
['like', 'name', [new \yii\db\Expression("'%test%'"), new \yii\db\Expression("'%sam_le%'")]]
Странно. У меня экранирует "_"gbushmakin писал(а): ↑2019.10.05, 11:16 Добрый день. Пытаюсь получить из таблицы LIKE %значения%, но почему то ничего не выходит. Как я подозреваю ничего не срабатывает из за нижнего подчеркивания, который в LIKE отвечает за подстановка любого одиночного символа. А мне нужно найти такое значение 0380-20. Когда делаю поиск LIKE просто 0380 - данные появляются.
Вот мой кодПробовал так же разные вариации:Код: Выделить всё
$test = '0380_20'; $search = Unloading::find() ->Where(['like', 'ARTICUL', $test]) ->all(); print_R($search);
%0380_20%
%0380%_%20%
Ничего не выходит...
Код: Выделить всё
$search = Unloading::find()
->where(['like', 'ARTICUL', $test]);
$sql = $search->createCommand();
print_r($sql->rawSql);
Тогда по документации так
Код: Выделить всё
->Where(['like', 'ARTICUL', $test, [ '_' => '_'] ])
Можно и так, но надо остальные экранировать, они не мержатся.dmg писал(а): ↑2019.10.05, 15:15
Тогда по документации такКод: Выделить всё
->Where(['like', 'ARTICUL', $test, [ '_' => '_'] ])
Код: Выделить всё
->where(['like', 'ARTICUL', $test, ['%' => '\%', '_' => '_', '\\' => '\\\\'] ])
//символ '_' можно просто опустить
->where(['like', 'ARTICUL', $test, ['%' => '\%', '\\' => '\\\\'] ])
Код: Выделить всё
WHERE name LIKE '%my\\_search\\_str_ng%'