PHP菜鸟博客_共同学习分享PHP技术心得【PHP爱好者】
thinkphp3.2.3的excel导入数据事务处理代码片段
2021-11-11 菜鸟站长


1.功能商品名称不能重复,包含excel里面不能重复,同时也不能和已经导入的商品名字重复。(没有通过数据库唯一约束实现)



2.循环里面一条一条处理,一旦有一条数据处理失败则回滚,都成功才会最终提交。(mysql数据库引擎需要是innodb)



3.如果多行数据有问题,失败问题原因都会展示。(错误累计展示,方便对excel修改,再次导入)



代码如下:






private function save_import_new($data) {
$basekeynum = $_SESSION["accountinfo"]["basekeynum"];
if (empty($data)) {
$rt["sta"] = 0;
$rt["msg"] = "导入为空";
echo json_encode($rt);
die;
}
$error_flag="0";
$error_msg="";
foreach ($data as $key => $value) {
$goods_id =$value["A"];
$goods_name =trim($value["B"]);
$cate_name =trim($value["C"]);
$goods_img = $value["D"];
$goods_des = $value["E"];
$goods_sort = $value["F"];
$goods_money = $value["G"];
$is_show = $value["H"];
if($goods_name=='') {
$error_flag=1;
$error_msg.= "第" . $key . "行商品名称为空!<br/>";
}
if($cate_name=='') {
$error_flag=1;
$error_msg.= "第" . $key . "行分类名称为空!<br/>";
}
$goodsinfo = M("goods")->where("goods_name='$goods_name' and basekeynum='$basekeynum' ")->find();
if (!empty($goodsinfo)) {
$error_flag=1;
$error_msg.= "第" . $key . "行商品名称和系统里面重复<br/>";
}
}
if($error_flag=='1') {
$rt["sta"] = 0;
$rt["msg"] = $error_msg;
echo json_encode($rt);
die;
}
//开启事务处理机制
$flag = true;
$Model = M();
$Model->startTrans();
foreach ($data as $key => $value) {
$goods_id =$value["A"];
$goods_name =trim($value["B"]);
$cate_name =trim($value["C"]);
$goods_img = $value["D"];
$goods_des = $value["E"];
$goods_sort = $value["F"];
$goods_money = $value["G"];
$is_show = $value["H"];
$goodsinfo = $Model->table('zs_goods')->where("goods_name='$goods_name' and basekeynum='$basekeynum' ")->find();
if (!empty($goodsinfo)) {
$flag = false;
$error_msg.= "第" . $key . "行商品名称(".$goods_name.")和excel里面其他行重复<br/>";
}
//先查询分类是否存在,不存在则新增
$cate_info =$Model->table('zs_goods_cate')->where("cate_name='$cate_name' and basekeynum='$basekeynum' ")->find();
if (!empty($cate_info)) {
$cate_id=$cate_info['cate_id'];
} else {
//新增
$addcate['cate_name']=$cate_name;
$addcate['cate_sort']=0;
$addcate['add_time']=time();
$addcate['status']=1;
$addcate['basekeynum']=$basekeynum;
$cate_id=$Model->table('zs_goods_cate')->add( $addcate);
if(!$cate_id) {
$flag = false;
$error_msg.= "第" . $key . "行分类名称".$cate_name."新增失败<br/>";
}
}
//新增商品
$add["goods_name"] = $goods_name;
$add["cate_id"] = $cate_id;
$add["goods_img"] = $goods_img;
$add["goods_des"] = $goods_des;
$add["goods_sort"] = $goods_sort;
$add["goods_money"] = $goods_money;
$add["is_show"] = $is_show;
$add["goods_add_time"] = time();
$add["basekeynum"] = $basekeynum;
$goods_id=$Model->table('zs_goods')->add($add);
if(!$goods_id) {
$flag = false;
$error_msg.= "第" . $key . "行商品名称".$goods_name."新增失败<br/>";
}
}
if($flag==true) {
$Model->commit();
$rt["sta"] = 1;
$rt["msg"] = "导入成功";
echo json_encode($rt);
die;
} else {
$Model->rollback();
$rt["sta"] = 0;
$rt["msg"] = "导入失败,失败原因".$error_msg;
echo json_encode($rt);
die;
}
}




发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容