代码之家  ›  专栏  ›  技术社区  ›  DolDurma

Laravel基于用户角色获取帖子

  •  0
  • DolDurma  · 技术社区  · 5 年前

    在我的数据库结构中,每个 Category 属于一个用户或多个用户 Users ,每个用户属于一个 Role 或者多个角色,然后每个用户都有一个 Post 或此模型所属的多个帖子 类别 ,

    提示: 类别 不属于 角色 模型

    简单地说,我们可以从这个结构中获取帖子或类别,但我想根据用户特定的情况获取所有帖子 role 获取这些帖子属于哪些类别

    我实现的代码不正确,返回空列表:

    $posts = Category::whereHas('users', function ($query) {
        $query->with(['user'=>function($q){
            $q->with(['roles'=>function($u){
                $u->whereLabel('is-admin');
            }]);
        },'posts']);
    })->get();
    
    0 回复  |  直到 5 年前
        1
  •  2
  •   user3532758    5 年前

    编辑:

    我已经测试了第二种解决方案,它似乎工作得很好。我确实带来了一个小变化;这就是改变 categories category 。以下是更新后的代码:

    $posts = Post::whereHas('user.roles', function($q){
        return $q->whereLabel('is-admin');
    })->with('category')->get();
    

    我假设你的关系定义类似于以下内容(仅显示必要的关系):

    之前注意:角色和用户具有多对多关系,因为一个用户可以有多个角色,一个角色可以属于多个用户。因此,数据透视表role_user位于角色和用户表之间,用于管理用户角色。

    在用户模型中:

    public function roles()
    {
        return $this->belongsToMany(Role::class);
    }
    

    榜样:

    public function users()
    {
        return $this->belongsToMany(User::class);
    }
    

    岗位模型:

    public function user()
    {
        return $this->belongsTo(User::class);
    }
    public function category()
    {
        return $this->belongsTo(Category::class);
    }
    

    基本上,用户有许多角色,类别与角色无关,在这种情况下,也与用户无关。那么,为什么不尝试根据用户角色选择帖子,然后快速加载类别呢。试试看:

    Post::with(['user.roles' => function ($query) {
        $query->whereLabel('is-admin');
    }])->with('categories')->get();
    //OR
    Post::whereHas('user.roles', function ($query) {
        $query->whereLabel('is-admin');
    })->with('categories')->get();
    
    推荐文章