iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >Thinkphp 6.0多对多关联查询
  • 872
分享到

Thinkphp 6.0多对多关联查询

php数据库mysql 2023-09-05 12:09:14 872人浏览 独家记忆
摘要

本节课我们来了解关联模型中,多对多的关联查询以及新增删除等操作。 一.多对多关联 1. 复习一下一对一,一个用户对应一个用户档案资料,是一对一关联; 2. 复习一下一对多,一篇文章对应多个评论,是一对多关联;

本节课我们来了解关联模型中,多对多的关联查询以及新增删除等操作。 一.多对多关联 1. 复习一下一对一,一个用户对应一个用户档案资料,是一对一关联; 2. 复习一下一对多,一篇文章对应多个评论,是一对多关联; 3. 多对多怎么理解,分解来看,一个用户对应多个角色,而一个角色对应多个用户; 4. 那么这种对应关系,就是多对多关系,最经典的应用就是权限控制; 5. 首先,我们来看多对多关系的三张表,具体如下:

 6. tp_user:用户表;tp_role:角色表;tp_access:中间表;

7. access 表包含了 user role 表的关联 id ,多对多模式; 8. User.PHP 的模型中,设置多对多关联,方法如下:
public function roles(){return $this->belongsToMany(Role::class, Access::class);}
9. roles 方法中, belongsToMany 为多对多关联,具体参数如下: belongsToMany(' 关联模型 ',' 中间表 ',[' 外键 ',' 关联键 ']);
$this->belongsToMany(Role::class, Access::class, 'role_id', 'user_id');
10. role.php access.php 创建一个空模型即可,无须创建任何; 11. 注意: Role 继承 Model 即可,而中间表需要继承 Pivot 12. user.php 中,创建 many() 方法,用于测试,查询方式如下:
public function many(){//得到一个用户:蜡笔小新$user = UserModel::find(21);//获取这个用户的所有角色$roles = $user->roles;//输出这个角色所具有的权限return JSON($roles);}
13. 当我们要给一个用户创建一个角色时,用到多对多关联新增; 14. 而关联新增后,不但会给 tp_role 新增一条数据,也会给 tp_access 新增一条;
$user->roles()->save(['type'=>'测试管理员']);$user->roles()->saveAll([[...],[...]]);
15. 一般来说,上面的这种新增方式,用于初始化角色比较合适; 16. 也就是说,各种权限的角色,并不需要再新增了,都是初始制定好的; 17. 那么,我们真正需要就是通过用户表新增到中间表关联即可;
$user->roles()->save(1);或:$user->roles()->save(Role::find(1));$user->roles()->saveAll([1,2,3]);或:$user->roles()->attach(1);$user->roles()->attach(2, ['details'=>'测试详情']);
18. 除了新增,还有直接删除中间表数据的方法:
$user->roles()->detach(2);

来源地址:https://blog.csdn.net/qq_34820433/article/details/129794150

--结束END--

本文标题: Thinkphp 6.0多对多关联查询

本文链接: https://www.lsjlt.com/news/395304.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作