Запрос Laravel 5.4 для поля JSON, содержащего массив JSON - PullRequest
0 голосов
/ 05 июня 2018

Внутри таблицы пользователей у меня есть столбец json с именем "agency", в котором данные хранятся в виде простого массива, подобного следующему:

[
"0eb2edf0-50cb-44ff-a0a6-b2a104a9dc12",
"f7c748d4-8718-441e-aa69-91b890ead5ed"
],

. Выше приведен действительный json.Когда я пытаюсь выбрать всех пользователей, которые содержат 0eb2edf0-50cb-44ff-a0a6-b2a104a9dc12, я получаю нулевое значение

Правильно ли выполнен мой запрос?

$users = User::whereRaw('JSON_CONTAINS(agencies->"$[*]", "0eb2edf0-50cb-44ff-a0a6-b2a104a9dc12")')->get();

ниже приведен правильный способ написания запроса выбора JSON, учитывая способ храненияuuids как массив внутри столбца агентств, который определен как json?

'JSON_CONTAINS(agencies->"$[*]", "0eb2edf0-50cb-44ff-a0a6-b2a104a9dc12"

Я получил идею для выбора выше из чтения: Создание запроса Laravel 5.4 для поля JSON, содержащего массив JSON

но решение в этом посте отличается от того, что я пытаюсь сделать, и моя модификация к нему не возвращает мне пользователей, но вместо этого я всегда получаю ноль обратно.

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

MySQL ожидает строку JSON:

$users = User::whereRaw('JSON_CONTAINS(agencies, ?)',
    ['"0eb2edf0-50cb-44ff-a0a6-b2a104a9dc12"'])->get();
$users = User::whereRaw('JSON_CONTAINS(agencies, ?)',
    [json_encode('0eb2edf0-50cb-44ff-a0a6-b2a104a9dc12')])->get();
0 голосов
/ 05 июня 2018

Я считаю, что это то, что вы хотите:

$users = User::whereRaw('JSON_CONTAINS(agencies, ?)', ['0eb2edf0-50cb-44ff-a0a6-b2a104a9dc12'])->get();

Это также скоро будет поддерживаться с помощью построителя запросов. См. PR

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...