Laravel / Eloquent / JSON "где" содержит и "не" содержит - PullRequest
0 голосов
/ 20 мая 2018

У меня есть два фильтра: allowed и blocked, которые преобразуются в json и содержат список пользователей, которым разрешено просматривать записи.Например:

record_id 1 
allowed ["1","2"] // nullable
blocked ["5","6"] // nullable

Теперь мне нужно выбрать все записи, которые может просмотреть конкретный user_id.

Records::where(function ($query) use ($user_id) {
        $query->where("allowed->$user_id", '!=', null)
            ->orWhere("allowed", null);
    })->where("blocked->$user_id", null)->get();

Это не работает, и я пытаюсь выяснить,правильный подход.Кто-нибудь видит проблему с приведенным выше кодом.

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

У меня нет способа проверить это, но я считаю, что это должно работать:

Records::where(function ($query) use ($user_id) {
    $query->whereRaw('JSON_CONTAINS(allowed, ?)', [$user_id])
        ->orWhere('allowed', null);
})->where('JSON_CONTAINS(blocked, ?) = 0', [$user_id])->get();

По сути, вы ищете список json, поэтому вам нужно использовать JSON_CONTAINS.

0 голосов
/ 20 мая 2018

Рассмотрите возможность использования whereIn из whereNotIn функций laravel.Вы передаете массив как второй параметр для функции.

Ссылка

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