ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
#### ***一.多对多关联*** 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);