BelongsToMany 关联模型之间的关系需要通过中间表进行连接和处理。在 Laravel 中,可以使用 BelongsToMany Through 来建立这种关系。
示例代码如下:
定义中间模型:
class RoleUser extends Model
{
protected $table = 'role_user';
public function user()
{
return $this->belongsTo(User::class);
}
public function role()
{
return $this->belongsTo(Role::class);
}
}
定义两个模型之间的关联:
class User extends Model
{
public function roles()
{
return $this->belongsToMany(Role::class, 'role_user');
}
public function permissions()
{
return $this->belongsToManyThrough(Permission::class, Role::class, 'role_user', 'role_id', 'user_id', 'id');
}
}
class Role extends Model
{
public function users()
{
return $this->belongsToMany(User::class, 'role_user');
}
public function permissions()
{
return $this->belongsToMany(Permission::class);
}
}
class Permission extends Model
{
public function roles()
{
return $this->belongsToMany(Role::class);
}
}
通过 BelongsToManyThrough,我们可以方便地获取到一个 User 模型所属 Role 模型拥有的 Permission 模型。
$user = User::find(1);
$permissions = $user->permissions;