Как получить отношение модели, только если данное условие на родительской модели выполнено - PullRequest
2 голосов
/ 10 июня 2019

У меня есть модель сообщений, мне нужно получать сообщения только из каналов, к которым принадлежит пользователь, если канал является закрытым или иным образом получать все сообщения со всех каналов.Публичный канал может просматривать каждый, и каждое сообщение принадлежит каналу

. В настоящее время из кода, который у меня есть, я получаю сообщения только из частных каналов, к которым присоединился пользователь.Я также не могу получать сообщения от общедоступных каналов.$ this-> model ссылки на Post model

$this->model->whereHas('channel', function ($q) use ($user){
                 $q->where('is_hidden', false)
                    ->where('is_private', false)
                    ->whereHas('members', function ($q) use ($user){
                        $q->where('user_id', $user->id);
                    }
                );
            });

Я должен получать все сообщения из частных каналов, к которым принадлежит пользователь, и все сообщения из открытых каналов

1 Ответ

1 голос
/ 10 июня 2019

Я выяснил это после нескольких испытаний, используя ->where(function($query){})

$this->model->whereHas('channel', function ($q) use ($user){
                 $q->where('is_hidden', false)
                    ->where(function ($q) use ($user){
                        $q->where('is_private', false)
                            ->orWhere(function ($q) use ($user){
                                $q->where('is_private', true)
                                    ->whereHas('members', function ($q) use ($user){
                                        $q->where('user_id', $user->id);
                                    });
                            });
                    });
            });

и идею из Красноречивый вложенный оператор WHERE

...