#### ***一.多對多關聯***
1.復習一下一對一,**一個用戶對應一個用戶資料**,是一對一關聯
2.復習一下一對多,***一篇文章對應多個評論***,是一對多關聯
3.多對多怎么理解呢,分解來看,就是**一個 用戶對應多個角色**,而一個角色對應多個用戶。就是兩個都是一對多關系,
4.那么這種對應關系,就是多對多關系,最經典的就是權限控制
5.比如有三個表,user用戶表,role角色表,access中間表
6.access表包含了user和role表的關聯id,多對多模式
7.在User模型中,設置多對多關聯
public function roles(){
return $this->belongsToMany('Role','Access');
}
belonsToMany為多對多關聯,具體參數如下:
belonsToMany('關聯模型','中間表',['外鍵','關聯鍵']);
$this->belongsToMany('Role','Access','role_id','user_id')
8.當我們要給一個用戶創建一個角色時,用到多對多關聯新增
9.而關聯新增后,不但會給role新增一條數據,也會給access新增一條
$user->roles()->save(['type'=>'管理員']);
10.一般來說,上面對的這種新增方式,用于初始化角色是比較合適 的
但是呢,各種權限的角色,并不需要再新增了,都是初始制定好的,那么,我們真正需要就是通過用戶表新增到中間表關聯即可
$user->roles()->save(1);//這個1,也就是一個權限等級id,因為,
每次添加一個用戶的權限,并不需要再去添加具體的權限了,所以,
只需要通過用戶表新增到中間表關聯即可,其實,
thinkphp還提供了一個專門的方法去實現這個邏輯功能,就是attach()
$user->roles()->attach(1)
11.除了新增,還有直接刪除中間表數據的方法
$user->roles()->detach(2);