ThinkPHP 处理商品添加的时候操作多张表 用事务解决。
#重新父类的add方法 public function add(){ #同时操作多装表,可以考虑用事务来做,要同时插入数据成功要么都不插输入数据。 #开启事务的前提是表的引擎必须是InnoDB #开启事务 //mysql_query("STRAT TRANSACTION"); #--------------(1)插入商品的基本信息------------ #判断是否插件成功 if(($goods_id=parent::add())===FALSE){ return FALSE; } #--------------(2)插入会员价格------------ #判断是否有POST数据提交过来 if(isset($_POST['Ml'])){ #实例化会员价格模型 $Mb_Price=M('MemberPrice'); #循环post提交过来的数据 foreach ($_POST['Ml'] as $k=>$v){ #插入数据 $is_ok=$Mb_Price->data(array( 'goods_id'=>$goods_id, 'level_id'=>$k, 'price'=>$v, ))->add(); /* if($is_ok===FALSE){ mysql_query("ROLLBACK"); return FALSE; } */ } } #--------------(3)插入商品属性----------- #判断POST提交过来是否有数据 if(isset($_POST['GoodsAttr'])){ #创建一个属性模型 $good_attr=M('GoodsAttr'); #循环读取post提交过来的数据 foreach($_POST['GoodsAttr'] as $k=>$v){ #在判断属性提交过来的是否是一个数组 如:颜色 有 白色 黑色 金黄 .... if(is_array($v)){ #在循环这个属性的数组 foreach ($v as $k1=>$v1){ #在循环插件数据、 $is_ok=$good_attr->data(array( 'goods_id'=>$goods_id, 'attr_id'=>$k, 'attr_value'=>$v1, ))->add(); /* if($is_ok===FALSE){ mysql_query("ROLLBACK"); return FALSE; } */ } }else{ #说明是单个值 $is_ok=$good_attr->data(array( 'goods_id'=>$goods_id, 'attr_id'=>$k, 'attr_value'=>$v, ))->add(); /* if($is_ok===FALSE){ mysql_query("ROLLBACK"); return FALSE; } */ } } } }