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