Исключить частных пользователей из БД - хранилище Laravel - PullRequest
1 голос
/ 27 октября 2019

У меня есть два пользователя (UserA и UserB). Оба пользователя из Италии, но если для UserB установлено значение country_private в поле true, UserA не сможет увидеть UserB.

В таблице users у меня есть country_field (true / false). У каждого пользователя может быть много стран.

Я пробовал это:

return $model->where(function ($query) use ($country) {
            $query->where('country_private', 1);
            $query->whereHas('countries', function ($query) use ($country) {
                $query->where('name', '!=', $country);
            });
        });

Это не работает, потому что с UserA я могу видеть UserB. Что мне здесь не хватает?

Редактировать: Это больше похоже на ограничение страны. Если я сижу, я не хочу, чтобы меня видели в Италии, никто из Италии не может видеть меня. Я использую GeoIP для определения страны и фильтрации.

Ответы [ 2 ]

0 голосов
/ 27 октября 2019

Я сам нашел решение.

return $this->repository->get()->filter(function ($user) use ($country) {
                if ($user->country_private == 0) {
                    return $user;
                }

                return !$user->countries()->where('name', $country)->exists();
            });
0 голосов
/ 27 октября 2019

Может быть, я не понимаю ваш вопрос, но как насчет простого запроса для пользователя A:

Для пользователя A

return $model->where('country_private','!=',true)->get();

Таким образом, вы получаете только пользователей с установленным country_privateЗначение true для пользователя A (при условии, что true является значением по умолчанию).

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