![项目功能](https://img-blog.csdnimg.cn/20190806160557777.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4MTMwOTU2,size_16,color_FFFFFF,t_70)
在一次项目开发中使用TP5框架开发,有个功能是向产品上传和修改.但是上传和修改是比较简单的,在上传的同时还需要实现
多个产品服务详情的添加和修改.经过一天半的研究,才完成该功能.
1.首先是多个产品上传,在前端页面中
<input type="text" class="form-control" name="gp_time[]" value="{$vo.gp_time}" aria-required="true" style="width:300px;">
各个字段使用name='gp_name[]'数组形式提交.这样当点击button按钮提交form表单时获得多个一维数组.
2.把多个一维数组用foreach修改为需要的二维数组.实例代码如下:
//套餐详情添加
foreach ($_POST['gp_body'] as $item=>$value){ //把接收的值(多个一位数组转)化为二维数组
$allarray[$item]['gp_body']=$_POST['gp_body'][$item];
$allarray[$item]['gp_effect']=$_POST['gp_effect'][$item];
$allarray[$item]['gp_equipment']=$_POST['gp_equipment'][$item];
$allarray[$item]['gp_product']=$_POST['gp_product'][$item];
$allarray[$item]['gp_time']=$_POST['gp_time'][$item];
$allarray[$item]['gp_price']=$_POST['gp_price'][$item];
$allarray[$item]['gp_name']=$_POST['gp_name'][$item];
$allarray[$item]['gp_process']=$_POST['gp_process'][$item];
$allarray[$item]['gp_m_id']=$su['id'] ;
$allarray[$item]['gp_ms_id']=$ms_id['id'] ;
$allarray[$item]['gp_msg_id']=$msg_id ;
}
foreach ($allarray as $k => $v){ //forreach 遍历如果一位数组中有指定8个值为空则删除对应数组
if ($allarray[$k]['gp_body']==''&& $allarray[$k]['gp_effect']==''&& $allarray[$k]['gp_equipment']==''&&
$allarray[$k]['gp_product']==''&& $allarray[$k]['gp_time']==''&& $allarray[$k]['gp_price']==''&&
$allarray[$k]['gp_name']==''&& $allarray[$k]['gp_process']=='')
{ unset($allarray[$k]);}
}
$pack=new MerchantStoreGoodsPack();
$resultpack=$pack->saveAll($allarray); //用模型方法saveAll即可实行多条数据的新增
3.当进入修改页面实现商品详情的修改,直接上代码:修改时首先要进行一个判断,当服务详情只有一个时,其他的服务详情没有对应表中的id使用新增的方法添加不上.因为每一个商品详情都从前端传递过来它的ID所以,对ID进行判断,当ID为空的时候执行的是新增方法,否则执行的是修改方法.实际代码如下:
$pack=new MerchantStoreGoodsPack();
$ms_id=Db::name('merchant_stroe')->where('m_id',$su['id'])->field('id')->find();//获取关联表的ms_id值
foreach ($_POST['gp_body'] as $item=>$value){ //把接收的值多个一位数组转化为二维数组
$allarray[$item]['gp_id']=$_POST['gp_id'][$item];
$allarray[$item]['gp_body']=$_POST['gp_body'][$item];
$allarray[$item]['gp_effect']=$_POST['gp_effect'][$item];
$allarray[$item]['gp_equipment']=$_POST['gp_equipment'][$item];
$allarray[$item]['gp_product']=$_POST['gp_product'][$item];
$allarray[$item]['gp_process']=$_POST['gp_process'][$item];
$allarray[$item]['gp_time']=$_POST['gp_time'][$item];
$allarray[$item]['gp_price']=$_POST['gp_price'][$item];
$allarray[$item]['gp_name']=$_POST['gp_name'][$item];
$allarray[$item]['gp_m_id']=$su['id'] ;
$allarray[$item]['gp_ms_id']=$ms_id['id'] ;
$allarray[$item]['gp_msg_id']=$_POST['id'] ;
}
foreach ($allarray as $k =>$v){
if ($allarray[$k]['gp_body']==''&& $allarray[$k]['gp_effect']==''&& $allarray[$k]['gp_equipment']==''&&
$allarray[$k]['gp_product']==''&& $allarray[$k]['gp_time']==''&& $allarray[$k]['gp_price']==''&&
$allarray[$k]['gp_name']==''&& $allarray[$k]['gp_process']=='') //如果不存在服务详情 执行新增操作
{ unset($allarray[$k]) ;}
if ($v['gp_id']==''){ //删除ID执行新增操作
unset($allarray[$k]['gp_id']);
}
}
$result=$pack->saveAll($allarray);
修改同样使用的是saveALL方法.从手册中可以查看到saveALL的详细用法,
- 实例化模型后调用save方法表示新增;
- 查询数据后调用save方法表示更新;
- save方法传入更新条件后表示更新;
以上就是这次是想多条服务详情的添加及修改方法.从业多年,有些基础知识因为使用不多都忘记了.在此记录一下希望对遇到这个问题的朋友有所帮助