多对多模型
背景:快递配送区域shipping_area 地区region + 一张关系表,
一个配送区域对应多个城市地区,
比如:一线城市这个配送区域 ——> 北上广深 ; 还有东三省、珠三角、江浙沪、偏远地区等...
一个地区也有可能对应多个配送区域,
比如:北京 ——> (首都、一线城市)
region.php 区域模型中
return $this -> belongsToMany('ShipingArea','tp_area_region','id1','id2');
ShipingArea.php 配送区域模型中建立同样方法
注意:两个关联id的顺序为关联表中的顺序
新增/更新
1、向一个表插数据,会触发关联表同时完成
$region = Region::getByName('北京市');
$region -> ShipingArea() ->save(['shiping_area_name' => '中国首都']);
如上:
shipping_area表中增加一条记录中国首都,此时关系表中增加一条关联记录
2、给当前用户加多个角色
$user = User::getById(30);
$user -> role() -> saveAll([
['role_name' => '角色1'],
['role_name' => '角色2'],
['role_name' => '角色3'],
]);
3、给一个地区添加一个现有的配送区域,实则在关联表添加一条关联记录
$region = Region::get(355);//现有地区
$ShipingArea = ShipingArea::getByShipingAreaName('珠三角'); //现有配送区域
调用attach()
$region -> shipingArea()->attach($ShipingArea);//这里可以直接传珠三角的id
删除关联
$region = Region::getByName('北京市'); //返回北京
$ShipingArea = ShipingArea::get(2); //返回首都
$region -> shipingArea()->detach($ShipingArea);// 只删除关系表关联记录
$region -> shipingArea()->detach($ShipingArea,true);// 删除关联记录同时删除shipingArea中对应的记录(首都)
查询
$region::get(2014,'shipingArea'); //这里传的方法名,查询的是多表
$region::get(2014); //不传第二参数可执行以下操作
$region ->shipingArea[0]-> 字段名
Model层中读取器
protected function getUserStatusAttr($value,$data)
{
$status = [ -1 => '删除', 0 => '禁用' , 1 => '正常', 2 => '待审核'];
return $status[$data['status']];
}
模型输出数据库中没有的字段
Controller层
使用toArray方法将当前的模型实例输出为数组
数组输出的字段值会经过获取器的处理,也可以支持追加其它获取器定义(不在数据表字段列表中)的字段
$user -> append(['user_status']) ->toArray();
$user = User::find(1);
$user ->toArray();//将当前的模型实例输出为数组
$user ->hidden(['reg_time','last_time'])->toArray(); //设置不输出的字段属性
$user ->visible(['user_id','nickname','email'])->toArray() //设置允许输出的属性
调用模型的toJson方法进行JSON序列化
$user ->toJson();
TP5中CURD那点事儿(六)
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...