belongsToMany('关联模型名','中间表名','外键名','当前模型关联键名',['模型别名定义']);
$this->belongsToMany('area','ar_reg','area_id','arps_id');
中,area
是要关联的模型名,ar_reg
是中间表名(也就是关联表名
),area_id
和arps_id
是关联表
中的两个字段
,area_id
字段对应着area
表,arps_id
字段对应着ar_ps
表。$this->belongsToMany('area','ar_reg');
模型名称
+_id
来自动找关联表中对应的,如ar_ps
表则会找arps
+_id
这个,也就是arps_id
dede_area
地区表dede_ar_ps
配送区域表dede_ar_reg
关联表 该表不用创建模型配送区域表
中,将地区表
中支持配送的区域名按自定义名称
放入到里面Area.php
和ArPs.php
,关联表不需要建立,因为这两个文件中已经调用了关联表
<?php namespace app\admin\model; use think\Model; class Area extends Model { public function arps() { return $this->belongsToMany('ar_ps','ar_reg','arps_id','area_id'); } } |
<?php namespace app\admin\model; use think\Model; class ArPs extends Model { public function area() { return $this->belongsToMany('area','ar_reg','area_id','arps_id'); } } |
public function ar() { $reg = Area::getByName('北京市'); $reg->arps()->save(['ar_name'=>'中国首都']); } |
dede_ar_ps
和dede_ar_reg
表数据如下区域表
里北京市
的id
与一线城市
的id
已经被插入到里面。
$reg = Area::getByName('重庆市'); $reg->arps()->saveAll([ ['ar_name'=>'火笼'], ['ar_name'=>'全国一线城市'] ]); |
V5.0.6+版本开始,attach方法的返回值是一个Pivot对象实例,如果是附加多个关联数据,则返回Pivot对象实例的数组。
area
表中取出id
为1
内容ar_ps
表中取出name
为火笼
的这条attach
将两者id
关联在同一列
$reg = Area::get(1); $arps = ArPs::getByArName('火笼'); $reg->ArPs()->attach($arps); |
area_id
为1
和4
的都对应着arps_id
的8
,而8
就是火笼
。
area
表中取出name
为北京市
的内容ar_ps
表中取出id
为8
的id
都存在同一列,用detech
将其删除
$reg = Area::getByName('北京市'); $arps = Arps::get('8'); $reg->Arps()->detach($arps); |
detach
加true
参数
$reg = Area::getByName('重庆市'); $arps = Arps::get('8'); $reg->Arps()->detach($arps,true); |
$reg = Area::get(1); foreach($reg->arps as $data) { echo $data['ar_name']."<br>"; } |
一线城市 首都
创始人微信
路漫漫其修远兮 吾将上下而求索添加创始人微信,一起交流心得
时间:2017年04月09日
时间:2017年01月13日
时间:2017年01月09日
时间:2019年04月10日
时间:2017年06月12日
评论