tp5模型笔记---多对多
关联模型
一对一: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(配送区域和地区关联表) 枢纽表
- Region.php
- namespace app\index\model;
- use think\Model;
- class Region extends Model{//全国地区表
- //配送区域表格
- public function shippingArea(){
- //地区表------配送区域表
- return $this->belongsToMany('ShippingArea','tp_area_region','shipping_area_id','region_id');
- }
- }
- ShippingArea.php
- namespace app\index\model;
- use think\Model;
- class ShippingArea extends Model{
- public function region(){
- return $this->belongsToMany('Region','tp_area_region','region_id','shipping_area_id');
- }
- }
- //在控制器中使用多对多关联模型
- namespace app\index\controller;
- use think\Controller;
- use think\Db;
- use app\index\model\Users;
- use app\index\model\Region;
- use app\index\model\ShippingArea;
- class Index extends Controller{
- //查询
- public function select(){
- $regon=Region::get(28558);
- echo $region->shippingArea[0]->shipping_area_name.'===<br/>';
- echo $region->shippingArea[1]->shipping_area_name.'===';
- //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
- }
- //更新
- public function update(){
- }
- //删除
- public function del1(){
- $region=Region::getByName('北京市');
- $shippingArea=ShippingArea::get(2);
- $region->shippingArea()->detach($shippingArea); 删除关联关系
- //delete from tp_area_region where region_id=1 and shipping_are_id=2
- }
- public function del2(){
- $region=Region::getByName('北京市');
- $shippingArea=ShippingArea::get(3);
- $region->shippingArea()->detach($shippingArea,true);
- return '配送区域删除成功';
- //delete from tp_area_region where region_id=1 and shipping_area_id=3
- //delete from tp_shippingArea where shipping_area_id=3;
- }
- //插入
- public function insert(){
- $region=Region::getByName('北京市');
- $region->shippingArea()->save(['shipping_area_name'='中国首都']);
- //select * from tp_region where name='北京市' limit 1
- //insert into tp_shipping_area(shipping_area_name) values('中国首都');
- //insert into tp_area_region('regin_id','shipping_area_id') values(1,'1');
- }
- public function saveAll(){
- $regin=Region::get(28558);
- $regin->shippingArea()->saveAll([
- ['shipping_area_name'=>'珠三角'],
- ['shipping_area_name'=>'全国一线城市']
- ])
- return '配送区域新增成功';
- }
- //把没有关联关系的数据插入到中间表中,形成关联关系
- public function relation(){
- $region=Region::get(28241);
- $shippingArea=ShippingArea::getByShippingAreaName('珠三角');
- $region->shippingArea()->attach($shippingArea);
- return '配送区域新增成功';
- }
- public function relation2(){
- $region=Region:get(28241);
- $region->shippingArea()->attache(2);
- return '配送区域新增成功';
- //insert into tp_area_region('region_id',shipping_area_id) values(28241,2);
- }
- }
tp5模型笔记---多对多的更多相关文章
- TP5模型belongsTo和hasOne的区别
在使用tp5模型的ORM的时候出现belongsTo和hasOne都有表示一对一的关系,但是二者并不相同.以下举例说明两者的区别: 首先有user表 字段 id name password字段 然后有 ...
- tp5模型事件回调函数中不能使用$this
tp5模型事件回调函数中不能使用$this,使用会报错,涉及到数据库操作使用Db类,不能使用$this->save()之类的方式 如果回调函数中需要使用类内函数,需要将函数定义为static,通 ...
- TP5模型belongsTo和hasOne这两个方法的区别
在使用tp5模型的ORM的时候出现belongsTo和hasOne都有表示一对一的关系,但是二者并不相同.以下举例说明两者的区别: 首先有user表 字段 id name password字段 然后有 ...
- 《C#并行编程高级教程》第9章 异步编程模型 笔记
这个章节我个人感觉意义不大,使用现有的APM(异步编程模型)和EAP(基于时间的异步模型)就很够用了,针对WPF和WinForm其实还有一些专门用于UI更新的类. 但是出于完整性,还是将一下怎么使用. ...
- TP5模型关联问题
在使用模型关联时:假如有表 merchant商户表 m_store 店铺表 m_store_ref 商户店铺关联表 user 普通用户表 $mer = Merchant::with([ ' ...
- TP5 模型类和Db类的使用区别
原文:http://www.upwqy.com/details/3.html 总结 在控制器中 模型操作 get() 和 all() 只能单独使用来查询数据 想要链式操作查询数据 需要使用f ...
- odoo开发笔记 -- 多对多字段追加数据
正常赋值操作: (以某个模型对象的附件为例) , , attach_ids)] 其中,attach_ids为附件对象id列表. 追加更新操作: 直接追加方式,没有找到;间接实现,每次更新前,去查询附件 ...
- 关于thinkphp框架中模型笔记
模型这一块,感觉学习的不是很清楚,单独水一贴thinkphp中模型的学习笔记. 0x01 模型类简介 数据库中每一张表对应一个模型,类名就是表名,类里面的成员变量就是列名, 把一张表对应为一个类,其中 ...
- ThinkPHP5——模型关联(多对多关联)
关联定义 多对多关联不像一对一和一对多关联,它还要多建一个中间表用来处理多对多的关联,例如: #城市 create table city ( c_id int primary key AUTO_INC ...
随机推荐
- 使用 Git & Repo 下载代码
客户端安装 Git 安装 git,gitk 网络连接正常的情况下: $ sudo apt-get install git-core gitk git-gui 不能上网,有.deb安装包的,请执行: $ ...
- LMS算法
一.感知器算法和LMS算法 感知器和自适应线性元件在历史上几乎是同时提出的,并且两者在对权值的调整的算法非常相似.它们都是基于纠错学习规则的学习算法. 感知器算法存在如下问题:不能推广到一般的前向网络 ...
- SMON进程、PMON进程、LGWR/ARCH
SMON 进程:system monitor instance monitor 系统监控.实例监控进程 说明及作用:在实例关闭时,会清理临时段,整理空闲空间free space; 实例非正常关闭后,启 ...
- shell 脚本实战笔记(5)--搭建资源的镜像服务器
背景: 由于访问国外站点资源, 有时特别慢. 偶尔一次下载, 肯定还能忍受, 对于多次使用或者小团队内部使用, 搭建一个镜像站点, 无疑是个明智的决定. 这边以搭建CDH5的yum源镜像, 作为例子, ...
- MAC 设置环境变量path的常用方法
单个用户设置 1)~/.bash_profile (任意一个文件中添加用户级环境变量) (注:Linux 里面是 .bashrc 而 Mac 是 .bash_profile) 若bash shell是 ...
- MyEclipse快捷键及经验总结 绝对的有用 太给力了
Ctrl+Shift+L 显示所有快捷键 Ctrl+K 参照选中的词(Word)快速定位到下一个 Ctrl+Shift+K 参照选中的词(Word)快速定位到上一个 C ...
- JSON-java
import net.sf.json.JSONArray; import net.sf.json.JSONObject; JSONObject jsonObject1 = new JSONObject ...
- JS经典面试题
自己总结了一些JS面试题 希望能够帮助正在找工作的程序猿(●´∀`●) 1.js 实现一个函数对javascript中json 对象进行克隆 var oldObject ="sdf" ...
- 有锁Iphone 3GS 6.0.1 降级刷到4.2.1 完美越狱+解锁
2012-12-20 百度空间所写 前言:由于之前的3GS升级到6.0.1后会有重启之后无法打电话的情况,同学觉得这样很烦,搞得手机不像个手机了.但是这也是没办法的,毕竟是不完美越狱加软解锁的.于是, ...
- hdu2073-2078
hdu2073 数学 #include<stdio.h> #include<math.h> double len(double x){ )*(x+)); } int main( ...