仅在满足父模型的给定条件时如何获取模型关系

Posted

技术标签:

【中文标题】仅在满足父模型的给定条件时如何获取模型关系【英文标题】:How to get a model relationship only if a given condition on parent model is met 【发布时间】:2019-10-24 19:20:45 【问题描述】:

我有一个帖子模型,如果频道是私有的,我只需要从用户所属的频道获取帖子,或者从所有频道获取所有帖子。公共频道所有人都可以查看,每个帖子都属于一个频道

目前,根据我拥有的代码,我仅从用户加入的私人频道获取帖子。我也无法从公共渠道获取帖子。 $this->模型对 Post 模型的引用

$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】:

我在使用->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);
                                    );
                            );
                    );
            );

从Eloquent nested WHERE statement得到和想法

【讨论】:

以上是关于仅在满足父模型的给定条件时如何获取模型关系的主要内容,如果未能解决你的问题,请参考以下文章

在laravel中按模型从数据库中获取数据时如何附加关系

如何获取Django中子模型中存在外键的父模型的所有对象?

MarionetteJS:仅在获取模型成功后渲染

`peewee`如何获取外键的父模型

如何从每个父模型中获取 N 条记录?在 laravel 中雄辩

laravel 关系模型如何通过帖子模型在评论模型中获取作者姓名