業務場景
– 使用者對應多個角色
– 角色也可以被其他使用者所擁有
表設計
users
id
name
roles
id
name
role_user
id
role_id
user_id
模型類
<?php
namespace App\Models;
class Role extends AbstractModel
{
protected $table = 'roles';
public function users()
{
return $this->belongsToMany(User::class,'role_user', 'role_id', 'user_id')
->using(RoleUser::class)
->withPivot('id', 'created_at','updated_at')
->withTimestamps();
}
public function roleUser()
{
return $this->hasMany(RoleUser::class,'role_id')->orderBy('id', 'desc');
}
}
<?php
namespace App\Models;
class User extends Authenticatable
{
protected $table = 'users';
public function roles()
{
return $this->belongsToMany(Role::class, 'role_user', 'user_id', 'role_id')
->withTimestamps();
}
}
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Relations\Pivot;
class RoleUser extends Pivot
{
protected $table = 'role_user';
public function user()
{
return $this->belongsTo(User::class, 'user_id');
}
public function role()
{
return $this->belongsTo(Role::class, 'role_id');
}
}
使用方法
## 建立使用者和角色之間的關聯
$user->roles()->attach([
$role1->id,
$role2->id,
]);
## 或者用sync()函式防止重複關聯
$user->roles()->sync([
$role1->id,
$role2->id,
]);
## 建立角色和使用者之間的關聯
$role->users()->attach([
$user1->id,
$user2->id,
]);
## 或者用sync()函式防止重複關聯
$role->users()->sync([
$user1->id,
$user2->id,
]);
## 查詢記錄
$user->roles;
$role->users;
## 刪除記錄
// 刪除使用者的一個角色
$user->roles()->detach($role->id);
// 刪除角色的一個使用者
$role->users()->detach($user->id);
// 刪除使用者的所有角色
$user->roles()->detach();
// 刪除角色的所有使用者
$role->users()->detach();
以上只針對參考
本作品採用《CC 協議》,轉載必須註明作者和本文連結