Laravel JSON, где пункты с номером в ключе - PullRequest
1 голос
/ 29 мая 2019

У меня есть таблица с JSON столбцом "параметры". Exemple:

 {"language":"en" }

Когда я делаю запрос, все в порядке:

DB::table('users')->where('options->language', 'en')->get();

Но если у меня есть цифровой ключ:

{"221":"en" }

Я получаю пустой массив:

DB::table('users')->where('options->221', 'en')->get();

Как я могу получить истинный запрос? Ларавелла 5.2

Ответы [ 3 ]

0 голосов
/ 29 мая 2019

Если вы обновите свою версию Laravel до версии 5.6 или новее, будет доступна ->whereJsonContains().

Если вы этого не хотите, вы можете сделать это с помощью запроса whereRaw.Точная реализация зависит от того, какая у вас СУБД:

SQL Server 2016

->whereRaw("JSON_VALUE(options, '$.221') = ?", ['en'])

MySQL

->whereRaw("JSON_CONTAINS(options, 'en', '$.221') = 1")
0 голосов
/ 29 мая 2019

Это было исправлено в более поздних версиях Laravel.

В Laravel 5.2 вы можете использовать необработанное выражение:

DB::table('users')->whereRaw('`options`->\'$."221"\' = ?', ['en'])->get();
0 голосов
/ 29 мая 2019

Попробуйте использовать whereJsonContains метод.В вашем случае:

DB::table('users')->whereJsonContaints('options', ['221' => 'en'])->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...