我正在laravel中开发基于角色的系统。
假设我们有三个模型:
用户:
class User extends Authenticatable
{
public function roles()
{
return $this->belongsToMany(\App\Role::class, 'role_user', 'user_id', 'role_id')->using(UserRole::class);
}
}
角色:
class Role extends EntrustRole
{
public function users()
{
return $this->belongsToMany(\App\User::class, 'role_user', 'role_id', 'user_id')->using(UserRole::class);
}
}
分支:
class Branch extends Model
{
public function user_roles()
{
return $this->morphMany(\App\UserRole::class, 'roleable');
}
}
每个用户可以在不同的分支上拥有一些角色(或者不在任何分支上工作)。因为我把role_user
表改成了这样的模型:
class UserRole extends Pivot
{
protected $table = 'role_user';
public function roleable()
{
return $this->morphTo();
}
public function role()
{
$this->belongsTo(Role::class, 'role_id', 'role_id');
}
public function user()
{
$this->belongsTo(User::class, 'user_id', 'user_id');
}
}
具有这种结构:
+---------+---------+-------------+--------------------------------+
| user_id | role_id | roleable_id | roleable_type |
+---------+---------+-------------+--------------------------------+
| 1 | 2 | null | null |
| 1 | 3 | null | null |
| 8 | 3 | 1 | Modules\Branch\Entities\Branch |
+---------+---------+-------------+--------------------------------+
现在我希望通过这些模型中定义的关系让所有在特定分支上工作的用户。但我不知道。
我想在Branch模型上定义一个users()
关系来做我想做的事情。但我不知道怎么办?