YII 事物无效问题 HELP HELP HELP HELP HELP HELP
程序员文章站
2022-04-25 20:51:12
...
各位大神们 入门PHP程序员求帮助
Yii事物
官方写法:
自己封装的写法:
说明:$this->getDb()是父类通过Yii 获取到的$connection对象
我只是在实例化的时候把$connection对象传到Db层,然后Db层进行增删改查等操作
但是在DB层的时候,执行excuse()方法时候直接插入到数据库了,事物没起作用,求解!!!
service层
谢谢版主,已经解决。
我这样的做法是为了在service中调用多个业务的DB来实现事物。想法应该是没错的,具体错误已经解决了。
经过排查之后找到是数据库引擎问题,我要操作那个表类型不知道怎么变成 MyISAM 了。
MyISAM 和 InnoDB 讲解 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快。
折腾了一上午,刚开始也考虑到可能是数据库引擎问题,但是可能性比较小就忽略了,大家以后还是要细心啊!!!!
Yii事物
官方写法:
$transaction=$connection->beginTransaction(); try { $connection->createCommand($sql1)->execute(); $connection->createCommand($sql2)->execute(); //.... other SQL executions $transaction->commit(); } catch(Exception $e) { $transaction->rollBack(); }
自己封装的写法:
说明:$this->getDb()是父类通过Yii 获取到的$connection对象
我只是在实例化的时候把$connection对象传到Db层,然后Db层进行增删改查等操作
但是在DB层的时候,执行excuse()方法时候直接插入到数据库了,事物没起作用,求解!!!
service层
public function addCourseRecommend($courseRecommend,$payWayArray) { try{ $connection=$this->getDb(); $transaction=$connection->beginTransaction(); $this->courseRecommendDb= new CourseRecommendDb($connection); $this->payWayDb=new PayWayDb($connection); $this->courseRecommendDb->addCourseRecommend($courseRecommend); foreach($payWayArray as $tempPayWay) { $this->payWayDb->addPayWay($tempPayWay); $tempPayWayRecommend =new PayWayRecommend(); $this->payWayDb->addPayWayRecommend($tempPayWayRecommend); } $this->commit($transaction); }catch (Exception $e){ $this->rollback($transaction); $this->closeLink(); throw $e; } $this->closeLink(); }
回复讨论(解决方案)
坐等回复
人呢,人呢。。。。。
但不明白你的代码在做什么
但需要注意的是:事务只在同一连接中有效
Yii 的数据库是基于 PDO 的,每次 new PDO 都会产生新的连接(这一点是与分立函数的数据库扩展是不同的)
但不明白你的代码在做什么
但需要注意的是:事务只在同一连接中有效
Yii 的数据库是基于 PDO 的,每次 new PDO 都会产生新的连接(这一点是与分立函数的数据库扩展是不同的)
谢谢版主,已经解决。
我这样的做法是为了在service中调用多个业务的DB来实现事物。想法应该是没错的,具体错误已经解决了。
经过排查之后找到是数据库引擎问题,我要操作那个表类型不知道怎么变成 MyISAM 了。
MyISAM 和 InnoDB 讲解 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快。
折腾了一上午,刚开始也考虑到可能是数据库引擎问题,但是可能性比较小就忽略了,大家以后还是要细心啊!!!!
下一篇: MYSQL触发器(Trigger)