关联模型

一对一:HAS_ONE  以及对应的BELONEGS_TO
一对多:HAS_MANY 以及相对的BELONGS_TO
多对多:BELONGS_TO_MANY

步骤:

第一:创建Users模型
第二:创建Comment模型
第三:在Users模型添加方法
第四:在comment模型添加方法
第五:测试

多对多关联表

truncate table tp_shipping_area
truncate table tp_area_region

select * from tp_shipping_area
select * from tp_area_region

1.清空tp_shipping_area表和tp_area_region表进行测试
2.创建Region模型和ShippingArea模型
3.设置Region模型的关联方法指定关联表
4.设置ShippingArea模型的关联方法指定关联表

三张表 tp_region(地区表)   tp_shipping_area(配送区域表)   tp_area_region(配送区域和地区关联表) 枢纽表

    1. Region.php
    2. namespace app\index\model;
    3. use think\Model;
    4. class Region extends Model{//全国地区表
    5. //配送区域表格
    6. public function shippingArea(){
    7. //地区表------配送区域表
    8. return $this->belongsToMany('ShippingArea','tp_area_region','shipping_area_id','region_id');
    9. }
    10. }
    11. ShippingArea.php
    12. namespace app\index\model;
    13. use think\Model;
    14. class ShippingArea extends Model{
    15. public function region(){
    16. return $this->belongsToMany('Region','tp_area_region','region_id','shipping_area_id');
    17. }
    18. }
    19. //在控制器中使用多对多关联模型
    20. namespace app\index\controller;
    21. use think\Controller;
    22. use think\Db;
    23. use app\index\model\Users;
    24. use app\index\model\Region;
    25. use app\index\model\ShippingArea;
    26. class Index extends Controller{
    27. //查询
    28. public function select(){
    29. $regon=Region::get(28558);
    30. echo $region->shippingArea[0]->shipping_area_name.'===<br/>';
    31. echo $region->shippingArea[1]->shipping_area_name.'===';
    32. //select tp_shippingArea.*,pivot.shipping_area_idaspivot_shipping_area_id,pivot.region_id AS pivot_region_id from tp_shipping_area Inner join tp_area_region pivot onpivot.shipping_area_id=tp_shipping_area.shipping_area_id where pivot.region_id=28558
    33. }
    34. //更新
    35. public function update(){
    36. }
    37. //删除
    38. public function del1(){
    39. $region=Region::getByName('北京市');
    40. $shippingArea=ShippingArea::get(2);
    41. $region->shippingArea()->detach($shippingArea); 删除关联关系
    42. //delete from tp_area_region where region_id=1 and shipping_are_id=2
    43. }
    44. public function del2(){
    45. $region=Region::getByName('北京市');
    46. $shippingArea=ShippingArea::get(3);
    47. $region->shippingArea()->detach($shippingArea,true);
    48. return '配送区域删除成功';
    49. //delete from tp_area_region where region_id=1 and shipping_area_id=3
    50. //delete from tp_shippingArea where shipping_area_id=3;
    51. }
    52. //插入
    53. public function insert(){
    54. $region=Region::getByName('北京市');
    55. $region->shippingArea()->save(['shipping_area_name'='中国首都']);
    56. //select * from tp_region where name='北京市' limit 1
    57. //insert into tp_shipping_area(shipping_area_name) values('中国首都');
    58. //insert into tp_area_region('regin_id','shipping_area_id') values(1,'1');
    59. }
    60. public function saveAll(){
    61. $regin=Region::get(28558);
    62. $regin->shippingArea()->saveAll([
    63. ['shipping_area_name'=>'珠三角'],
    64. ['shipping_area_name'=>'全国一线城市']
    65. ])
    66. return '配送区域新增成功';
    67. }
    68. //把没有关联关系的数据插入到中间表中,形成关联关系
    69. public function relation(){
    70. $region=Region::get(28241);
    71. $shippingArea=ShippingArea::getByShippingAreaName('珠三角');
    72. $region->shippingArea()->attach($shippingArea);
    73. return '配送区域新增成功';
    74. }
    75. public function relation2(){
    76. $region=Region:get(28241);
    77. $region->shippingArea()->attache(2);
    78. return '配送区域新增成功';
    79. //insert into tp_area_region('region_id',shipping_area_id) values(28241,2);
    80. }
    81. }

tp5模型笔记---多对多的更多相关文章

  1. TP5模型belongsTo和hasOne的区别

    在使用tp5模型的ORM的时候出现belongsTo和hasOne都有表示一对一的关系,但是二者并不相同.以下举例说明两者的区别: 首先有user表 字段 id name password字段 然后有 ...

  2. tp5模型事件回调函数中不能使用$this

    tp5模型事件回调函数中不能使用$this,使用会报错,涉及到数据库操作使用Db类,不能使用$this->save()之类的方式 如果回调函数中需要使用类内函数,需要将函数定义为static,通 ...

  3. TP5模型belongsTo和hasOne这两个方法的区别

    在使用tp5模型的ORM的时候出现belongsTo和hasOne都有表示一对一的关系,但是二者并不相同.以下举例说明两者的区别: 首先有user表 字段 id name password字段 然后有 ...

  4. 《C#并行编程高级教程》第9章 异步编程模型 笔记

    这个章节我个人感觉意义不大,使用现有的APM(异步编程模型)和EAP(基于时间的异步模型)就很够用了,针对WPF和WinForm其实还有一些专门用于UI更新的类. 但是出于完整性,还是将一下怎么使用. ...

  5. TP5模型关联问题

    在使用模型关联时:假如有表   merchant商户表   m_store 店铺表  m_store_ref 商户店铺关联表  user 普通用户表 $mer = Merchant::with([ ' ...

  6. TP5 模型类和Db类的使用区别

    原文:http://www.upwqy.com/details/3.html 总结 在控制器中  模型操作  get() 和 all()  只能单独使用来查询数据   想要链式操作查询数据 需要使用f ...

  7. odoo开发笔记 -- 多对多字段追加数据

    正常赋值操作: (以某个模型对象的附件为例) , , attach_ids)] 其中,attach_ids为附件对象id列表. 追加更新操作: 直接追加方式,没有找到;间接实现,每次更新前,去查询附件 ...

  8. 关于thinkphp框架中模型笔记

    模型这一块,感觉学习的不是很清楚,单独水一贴thinkphp中模型的学习笔记. 0x01 模型类简介 数据库中每一张表对应一个模型,类名就是表名,类里面的成员变量就是列名, 把一张表对应为一个类,其中 ...

  9. ThinkPHP5——模型关联(多对多关联)

    关联定义 多对多关联不像一对一和一对多关联,它还要多建一个中间表用来处理多对多的关联,例如: #城市 create table city ( c_id int primary key AUTO_INC ...

随机推荐

  1. apache中的RewriteCond、RewriteRule

    Rewirte主要的功能就是实现URL的跳转.可基于服务器级的(httpd.conf)和目录级的(.htaccess) 两种方式.如果要想用到rewrite模块,必须先安装或加载rewrite模块. ...

  2. mysql-5.6.17-win32安装

    下载免安装压缩文件http://dev.mysql.com/downloads/mysql/ 解压到自定义目录,我这里演示的是D:\wamp\mysql\   复制根目录下的my-default.in ...

  3. ssh key建立后不能clone问题

    在建立了ssh密钥对之后,要将私钥添加,公钥key添加到gitlab的ssh keys里. 添加成功后,这个时候,你可以clone了! 总结:如果是遇到重复输入密码的情况,可能是ssh-key,的私钥 ...

  4. Cookie注入实战(非SQL注入)

    cookie注入原理其实很简单,就是利用了session机制中的特性,只能说是特性,不能算是漏洞. 这里简单的说下原理,session的机制就相当于你有一张蛋糕店的会员卡,这张会员卡就是你浏览器中的c ...

  5. C语言基础:指针初级(补充) 分类: iOS学习 c语言基础 2015-06-10 21:54 19人阅读 评论(0) 收藏

    结构体指针:指向结构体指针的变量的指针. 结构体指针指向结构体第一个成员变量的首地址 ->:   指向操作符 定义的指针变量必须指向结构体的首地址,才可以使用  ->  访问结构体成员变量 ...

  6. 2018C语言助教总结

    回顾 很荣幸得到各位老师的认可,担任计科3班和4班的C语言课程助教,很感谢车老师和牛老师一学期的帮助,使得我更好的担任助教一职.我班学生59名,很愉快的与同学们度过一个美好的学期,其实作为助教同样从学 ...

  7. bug20170125

    1s定时请求接口,接口不响应(接口挂掉),浏览器崩溃

  8. BZOJ4897: [Thu Summer Camp2016]成绩单【DP of DP】

    Description 期末考试结束了,班主任L老师要将成绩单分发到每位同学手中.L老师共有n份成绩单,按照编号从1到n的顺序叠 放在桌子上,其中编号为i的成绩单分数为w_i.成绩单是按照批次发放的. ...

  9. java新的语法糖:Java 8 Lambda表达式

    ***************************************************************************

  10. stenciljs 学习八 组件测试

    测试对于框架来说比较重要,对于web 组件的测试同样很重要,类似的jest 很方便,stenciljs也是基于jest 开发的 包含两个核心api render(), flush() 测试配置 pac ...