Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel基于用户角色获取帖子_Php_Laravel - Fatal编程技术网

Php Laravel基于用户角色获取帖子

Php Laravel基于用户角色获取帖子,php,laravel,Php,Laravel,在我的数据库结构中,每个类别属于一个用户或多个用户,每个用户属于一个角色或多个角色,然后每个用户都有一个帖子或多个帖子,此模型属于类别 提示:类别不属于角色型号 简单地说,我们可以从这个结构中获取帖子或类别,但我想根据特定于用户的角色获取所有帖子,并获取这些帖子属于哪些类别 我的实现代码不正确,返回空列表: $posts = Category::whereHas('users', function ($query) { $query->with(['user'=>functi

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

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

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

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

$posts = Category::whereHas('users', function ($query) {
    $query->with(['user'=>function($q){
        $q->with(['roles'=>function($u){
            $u->whereLabel('is-admin');
        }]);
    },'posts']);
})->get();
编辑:

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

$posts = Post::whereHas('user.roles', function($q){
    return $q->whereLabel('is-admin');
})->with('category')->get();
我假设您的关系定义与以下类似(仅显示必要的关系):

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

在用户模型中:

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

还有一件事,首先查询返回所有
帖子
,不能按角色指定或过滤,这意味着我有所有帖子和角色,这个角色可能是关系,我可以只按特定角色过滤列表吗?提前谢谢,我本以为第二个会有用的。让我来测试一下,第二个已经测试过了,事实上正在运行,请检查更新的答案。