从父级获取过滤的子级

我有一对多的关系。所以我可以使用这段代码来显示所有帖子。


$tag = Tag::where('slug', $slug)->first();

$posts = $tag->posts;

它工作正常,但我想过滤孩子显示。例如:


$posts = $tag::whereHas('posts', function($query){

$query->where('accept', 1)

})->get();

但它得到标签而不是帖子。知道如何解决我的问题吗?


潇湘沐
浏览 232回答 3
3回答

繁星coding

在 Post 模型中,您必须像这样定义与标签的关系public function tags(){    return $this->hasMany(Tag::class);}这就是您可以从特定标签获取帖子的方式$slug = "my-slug";$posts = Post::whereHas('tags', function($query) use ($slug){    $query->where('slug', $slug)})->where('accept', 1)->get();

临摹微笑

如文档所述:由于所有关系也用作查询构建器,因此您可以通过调用 comments 方法并继续将条件链接到查询上来添加进一步的约束来检索评论:$comment = App\Post::find(1)->comments()->where('title', 'foo')->first();您可以将代码更改为:$posts = $tag->posts()->where('accept', 1)->get()

牛魔王的故事

您可以使用$tag = Tag::where('slug', $slug)    ->with(['posts' => function($q) {        $q->where('accept', 1);    }])->first();$posts = $tag->posts;
打开App,查看更多内容
随时随地看视频慕课网APP