Intereting Posts
На каком языке встроены функции PHP? Не отправлять правильные данные объекта в Pusher введите ключ для сохранения значений textarea Doctrine entitymanager clear не полностью очищает Как проверить, является ли загруженный файл изображением без типа mime? Я хочу знать, как я могу получить значение из этого print_r, показанного ниже Разрешения Unix, чтение и выполнение (контекст PHP) Как заставить его запустить команду `exec ()` в PHP для редактирования некоторого файла в Mac OS X? Неверные возвращаемые типы в PHP7 полный пример gettext в php Композитный шаблон в PHP, как создавать классы для работы вокруг необходимости расширения двух классов апостроф вроде и равное положение не работает PHP DOMXPath – выражение для выбора tr, содержащего вход с определенным атрибутом Максимальный размер массива $ _POST PHP Codeigniter показывает кеш, когда я нажимаю кнопку «Назад» после выхода из системы

Искать в колонке JSON, используя красноречивый Laravel

Я работал с красноречивым Laravel 5.4, и я столкнулся с проблемой.

У меня есть таблица базы данных, называемая сообщениями, и в этом столбце с именем template_ids . Он сохраняет значения в формате json_encoded , например:

 ["1","25","48"] 

Теперь я хочу применить фильтр к моему запросу на основе массива идентификаторов:

 $id_access = array:3 [ 0 => "1" 1 => "3" 2 => "48" ] 

Я пытаюсь выполнить поиск, если какой-либо из значений $id_access присутствует в столбце базы данных, template_ids .

Я пытался:

 Post::where('accessable_to',1)->whereIn('template_ids', $template_access_array)->paginate(3); 

Кроме того, я попробовал:

 Post::where('accessable_to',1)->whereRaw("JSON_CONTAINS(template_ids, ".$template_access.")")->paginate(3); 

Я уже видел это , но он не работает для меня.

Чтобы узнать, содержит ли поле template_ids JSON «любое» значение в массиве игл, вам понадобится использовать несколько условий JSON_CONTAINS которые требуют MySQL 5.7:

 $ids = ['1', '3', '48']; Post::where('accessable_to', 1) ->where(function ($query) use ($ids) { $firstId = array_shift($ids); $query->whereRaw( 'JSON_CONTAINS(template_ids, \'["' . $firstId . '"]\')' ); foreach ($ids as $id) { $query->orWhereRaw( 'JSON_CONTAINS(template_ids, \'["' . $id . '"]\')' ); } return $query; }); return Post::paginate(3); 

В построителе запросов Laravel будет создан запрос типа:

 SELECT * FROM "posts" WHERE "accessable_to" = ? AND ( JSON_CONTAINS(template_ids, '["1"]') OR JSON_CONTAINS(template_ids, '["3"]') OR JSON_CONTAINS(template_ids, '["48"]') ) 

Какие записи целей содержат какие-либо из этих идентификаторов в своем поле ввода template_ids JSON template_ids .

Возможно, вам будет интересно ознакомиться с соответствующим предложением внутренних дел Laravel.

Что сказать:

 $query = Post::where([]); $query->where(function($query, $template_ids){ foreach ($template_ids as $id){ $query->orWhere('searching_field', 'like', '%'.$id.'%'); } }); $query->get()