yii事务提交的在save之后catch的Exception应该是什么类型? [ 2.0 版本 ]
有两个Exception 一个是\yii\base\Exception 一个是\yii\db\Exception,
这种捕获当程序出错的时候,应该都算是误操作,不论哪一种Exception 数据库都应该回滚,
但是这个Exception 应该捕获哪一个呢?
这些Exception的定义都不在一起,怎样确保抛出的异常一定被捕获
共 1 个回答
-
dingjj2010 回答于 2017-06-06 19:00 举报
用父类\Exception捕获.
共 16 条回复@YiiNewer
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
现在确实是innodb的。。但是第一个save()了,throw Exception之后,第一个没回滚。
我出于这样考虑的原因是: $model1->save() 之后,$model2->save()之前,如果model2的rule验证失败。$model2就是empty的。 然后$model2->save()就不会写入了。。但是这个model1和$model2是 关联的 (父-子表),必须同时写入或者同时删除,有没有什么别的思路呢?dingjj2010 回复于 2017-06-09 09:08 回复@hzz 确认下引擎是INNODB吗?确认下代码是否有执行rollback.
@dingjj2010 确认是innodb的表,但整个db 是 MyISAM的,我怀疑是这个问题,还米有验证。我直接现在手动判断后再save。
hzz
最后登录:2019-06-10
在线时长:8小时32分
- 粉丝1
- 金钱110
- 威望0
- 积分190