$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 написать?