为了账号安全,请及时绑定邮箱和手机立即绑定

从父级获取过滤的子级

从父级获取过滤的子级

PHP
潇湘沐 2022-01-08 16:28:36
我有一对多的关系。所以我可以使用这段代码来显示所有帖子。$tag = Tag::where('slug', $slug)->first();$posts = $tag->posts;它工作正常,但我想过滤孩子显示。例如:$posts = $tag::whereHas('posts', function($query){$query->where('accept', 1)})->get();但它得到标签而不是帖子。知道如何解决我的问题吗?
查看完整描述

3 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

在 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();


查看完整回答
反对 回复 2022-01-08
?
临摹微笑

TA贡献1982条经验 获得超2个赞

文档所述

由于所有关系也用作查询构建器,因此您可以通过调用 comments 方法并继续将条件链接到查询上来添加进一步的约束来检索评论:

$comment = App\Post::find(1)->comments()->where('title', 'foo')->first();

您可以将代码更改为:

$posts = $tag->posts()->where('accept', 1)->get()


查看完整回答
反对 回复 2022-01-08
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

您可以使用


$tag = Tag::where('slug', $slug)

    ->with(['posts' => function($q) {

        $q->where('accept', 1);

    }])->first();

$posts = $tag->posts;


查看完整回答
反对 回复 2022-01-08
  • 3 回答
  • 0 关注
  • 209 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号