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;

				  }

				*/

    	 		}

    	 	}

    	 }

    }

  

你可能感兴趣的:(thinkphp)