从父级获取过滤的子级
Posted
技术标签:
【中文标题】从父级获取过滤的子级【英文标题】:Get filtered child from parent 【发布时间】:2020-01-14 02:08:29 【问题描述】:我有一对多的关系。所以我可以使用这段代码来显示所有帖子。
$tag = Tag::where('slug', $slug)->first();
$posts = $tag->posts;
它工作正常,但我想过滤子显示。例如:
$posts = $tag::whereHas('posts', function($query)
$query->where('accept', 1)
)->get();
但它获取的是标签而不是帖子。知道如何解决我的问题吗?
【问题讨论】:
问题出在这里$tag::whereHas
应该是Tag::whereHas
【参考方案1】:
正如documentation所提到的:
由于所有关系也用作查询构建器,因此您可以通过调用 cmets 方法并继续将条件链接到查询上来添加更多的约束条件来检索 cmets:
$comment = App\Post::find(1)->comments()->where('title', 'foo')->first();
您可以将代码更改为:
$posts = $tag->posts()->where('accept', 1)->get()
可以直接查询关系。
【讨论】:
【参考方案2】:在 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();
【讨论】:
【参考方案3】:你可以使用
$tag = Tag::where('slug', $slug)
->with(['posts' => function($q)
$q->where('accept', 1);
])->first();
$posts = $tag->posts;
【讨论】:
以上是关于从父级获取过滤的子级的主要内容,如果未能解决你的问题,请参考以下文章
在 useEffect() 钩子中从父级传递的子级调用函数,React