yx
- yx 2015-05-27 已签到连续签到4天,获得了20个金钱
你的这个需求,其实有好几种解决方式:
1.是否一定需要报错?是否可以考虑在数据库里设置一下外键删除时的动作,比如CASCADE ?
2.如果按你说的,你需要删除时判断是否有从属数据,那么你应该先判断从属数据是否存在,而不是通过异常去处理,因为异常出现的可能性很多,不一定是因为存在从属数据导致。
3.我看到了你的异常捕获,
catch (Exception $ex) { $transaction->rollBack(); ...
这种形式是正确的,但是你的思路错误,你认为delete()返回非true值时应该抛出一个异常,但是事实上delete()方法在删除报错时,内部已经先一步抛出了异常,也就是说,你的
throw new Exception("订单删除失败");
应该是不会触发的。恩,也只能先判断是否有数据依赖,没有再删除,有的话就禁止删除
- yx 回复了 chocoboxxf 的回答
可以先做unlinkAll,把有外键依赖的关系表中的数据先删除,类似
$requirement_data->unlinkAll('employer', true); // employer是定义的表yfp_order_employer关联名 $requirement_data->delete();
恩,但是如果这样的话,那么,依赖他的数据不就不完整了吗?
心有余而力不足,唉,不会
CDbCommand 无法执行 SQL 语句: SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`yfp`.`yfp_order_employer`, CONSTRAINT `FK_orders_requirement` FOREIGN KEY (`requirement_id`) REFERENCES `yfp_requirement` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION). The SQL statement executed was: DELETE FROM `yfp_requirement` WHERE `yfp_requirement`.`id`=15
这是异常报错
因为是删除带有外键的内容所以报错,但是delete方法为什么不发挥false,而是数据库报错?
- yx 提出了问题关联表的删除报错捕获
- yx 2015-05-26 已签到连续签到3天,获得了15个金钱
- yx 赞了评论
为何不使用PHPEXCEL呢?亲