itsoft
@itsoft
Директор веб-студи и дата-центра itsoft

Как заставить whereRaw в Laravel не обрамлять в кавычки переменные?

$v = 'test';    
$query->whereRaw('(`column_name` RLIKE "[[:<:]]?[[:>:]]" ...)', [$v]);


Результат: (`column_name` RLIKE "[[:<:]]'test'[[:>:]]" ...)

А хочется (`column_name` RLIKE "[[:<:]]test[[:>:]]" ...), т.е. без дополнительных кавычек. Я сам в состоянии решить, где мне кавычки нужны. Задача whereRaw поставить переменные заэскейпив кавычки внутри переменных.

Можно сделать так:

$v = "[[:<:]]test[[:>:]]";
$v = DB::connection()->getPdo()->quote($v);    
$query->whereRaw('(`column_name` RLIKE ? ...)', [$v]);


Или так:

$v = 'test';
$v = DB::connection()->getPdo()->quote($v);  
$query->whereRaw('(`column_name` RLIKE [[:<:]]' . $v . '[[:>:]] ...)', []);


Но это костыльные способы по-моему.

Поясните, почему whereRaw работает с добавлением кавычек. В чём причина?

Ну и правильно я понимаю, что из коробки то, что я хочу нет и мне нужно свой trait написать?
  • Вопрос задан
  • 485 просмотров
Пригласить эксперта
Ответы на вопрос 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
рука-лицо
кто вообще ребенку whereRaw показал, кто этот нехороший дядя-извращенец?
$v = 'test';
$query->where('column_name', 'RLIKE', "[[:<:]]{$v}[[:>:]]");

тебе не нужно whereRaw
и тем более не нужно quote()

Ну и правильно я понимаю, что из коробки то, что я хочу нет и мне нужно свой trait написать?

может тебе лучше программиста нанять, директор?
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы