Как выбрать, где json, как массив ключей и значений через Eloquent ORM? - PullRequest
0 голосов
/ 17 июня 2019

У меня есть таблица MySQL с полем json:

Schema::create('meta', function (Blueprint $table) {
       $table->json('details');
});

и массив ключей и значений:

$filter = ['key' => 'val', 'id' => 'val'];

Как выбрать строки, в которых json содержит ключи и значения из массива?

Это не работает:

Meta::where('details', $filter)->get();
Meta::whereJsonContains('details', $filter)->get();

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

Обходной путь:

Meta::where(function($query) use($filter) {
    foreach($filter as $k => $v) {
        $query->orWhere("details->{$k}", $v);
    }
})->get();

Но он не будет работать с глубокими вложенными массивами.

0 голосов
/ 17 июня 2019

Вам необходимо использовать JSON Where Clauses

Чтобы запросить столбец JSON, используйте оператор ->:

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

$users = DB::table('users')
                ->where('preferences->dining->meal', 'salad')
                ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...