#### ***一.多对多关联***
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);