#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
значение в моей базе данных..