我希望能对以下问题有所了解。首先概述游戏中的桌子。
**users**
user_id - integer
name - string
user_role_id - integer(default role for the user system wide)
**user_roles**
user_role_id - integer
name - string
**user_groups**
user_group_id - integer
name - string
**user_group_users**
user_id - integer
user_group_id - integer
user_role_id - integer(role is specific to user_group and overrides the default permissions for the user in the user group)
我为 user_group_users 创建了一个自定义的中间模型,以保持环境整洁并帮助进行数据访问。但是我在哪里以及如何实现一个简单的作用域方面挣扎。目前,我可以使用Auth::user()->userGroups
来获取特定用户的所有组,但是我希望能够对其进行过滤,以仅检索该用户为管理员的列表,即其中他们的user_role_id代表< strong> user_group_users 表。我希望能够这样做:Auth::user()->userGroups->isAdmin()
。
在此设置中我将示波器放在哪里?我尝试将其放置在 UserGroupUser 模型中,但无效。
public function scopeIsAdmin($query){
return $query->where('user_role_id', 2);
}
Auth :: user()-> userGroups()-> isAdmin()结果为Call to undefined method Illuminate\Database\Eloquent\Relations\BelongsToMany::isAdmin()
适用关系
**User.php**
public function userGroups()
{
return $this->belongsToMany('App\Models\UserGroup', 'user_group_users', 'user_id', 'user_group_id')
->using('App\Models\UserGroupUser');
}
**UserRole**
public function users()
{
return $this->hasMany('App\Models\User', 'user_role_id', 'user_role_id');
}
**UserGroup**
public function users()
{
return $this->belongsToMany('App\Models\User', 'user_group_users', 'user_group_id', 'user_id')
->using('App\Models\UserGroupUser');
}
**UserGroupUser.php**
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Relations\Pivot;
class UserGroupUser extends Pivot
{
protected $table = 'user_group_users';
public $timestamps = false;
public function user()
{
return $this->belongsTo('App\Models\User', 'user_id', 'user_id');
}
public function role()
{
return $this->belongsTo('App\Models\UserRole', 'user_role_id', 'user_role_id');
}
}