Можно ли зарегистрировать новый оператор для Query Builder в Laravel?

Доброго дня.
Использую связку Laravel + PostgreSQL, и возникла необходимость сделать регистронезависимое сравнение значений колонки с любым из значений массива. Для этого отлично подходит связка ILIKE ANY, но Laravel ее не воспринимает, как оператор.
$query->where('data', 'ilike', $keywords); // <--- все супер

// думает, что ilike any - это значение и начинает сравнивать с ним
$query->where('data', 'ilike any', $keywords); // <--- $keywords игнорируются

Можно ли зарегистрировать свой оператор для Query Builder'a? Крайне не хочу использовать whereRaw или проходить по $keywords в цикле.

Заранее спасибо.
  • Вопрос задан
  • 230 просмотров
Пригласить эксперта
Ответы на вопрос 2
v_decadence
@v_decadence
В чём проблема использовать whereRaw? Там можно использовать ?-привязки и не бояться инъекций.

Можно так попробовать
$query->where('data', DB::raw("ilike any"), $keywords);

Регистрация своих операторов не предусмотрена, насколько я знаю.
Ответ написан
Alex_Wells
@Alex_Wells
PHP/Kotlin
Можно. Используйте mixin'ы: *тык*

После этого прописываете в вендоре @method в докблоке. Да, решение очень далеко от идеала, но имеем что имеем :/
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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