Создание запроса к полю JSON без учета регистра с использованием Laravel

#php #mysql #json #laravel

#php #mysql #json #laravel

Вопрос:

Мои данные хранятся в виде массива JSON в from столбце следующим образом:

 [{"emailAddress": {"name": "Test", "address": "example@example.com"}}]
  

Я хочу выполнить поиск без учета регистра в этом столбце. Это то, что я пробовал до сих пор (без успеха):

 ->orWhereRaw('lower(from->"$[*].emailAddress.name") like lower(?)', ["%{$searchTerm}%"]);

->orWhereRaw('lower(from->"$.emailAddress.name") like lower(?)', ["%{$searchTerm}%"]);

->orWhereRaw('lower(from->emailAddress"$.name") like lower(?)', ["%{$searchTerm}%"]);
  

Все с той же ошибкой:

 SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from->"$[*].emailAddress.name") like lower(?)' at line 1
  

«Запрос с учетом регистра»

 ->orWhere('from->emailAddress->name', 'like', "{$searchTerm}");
  

работает без каких-либо проблем.

Я использую MySQL 5.7.25 и Laravel 5.8.

Ответ №1:

Слово from является специальным ключевым словом в SQL и должно заключаться в кавычки с обратными знаками. Версия запроса, которая, скорее всего, сработает, является:

 lower(`from`->"$[*].emailAddress.name") like lower(?)
  

Комментарии:

1. Спасибо @Joni! Ошибка устранена, однако ожидаемого результата нет (= 0).. Вот как запрос привязывается: select count(*) from `messages` where lower(`from`->"$[*].emailAddress.name") like lower('%te%') и у меня есть Test значение в моей базе данных..