yx

yx

这家伙有点懒,还没写个性签名!

  • 财富值5925
  • 威望值45
  • 总积分6685

个人信息

  • 赞了说说
    250 还有 20 天!
  • 2015-05-27 已签到
    连续签到4天,获得了20个金钱
  • 回复了 的回答

    自定义一个exception 比如UserException 或者OrderException等等,然后只捕获这个异常 ,其他的异常让系统处理去吧

    恩,数据表的设计确实是关键

  • 回复了 的回答

    你的这个需求,其实有好几种解决方式:

    1.是否一定需要报错?是否可以考虑在数据库里设置一下外键删除时的动作,比如CASCADE ?

    2.如果按你说的,你需要删除时判断是否有从属数据,那么你应该先判断从属数据是否存在,而不是通过异常去处理,因为异常出现的可能性很多,不一定是因为存在从属数据导致。

    3.我看到了你的异常捕获,

    catch (Exception $ex) {
        $transaction->rollBack();
    ...
    

    这种形式是正确的,但是你的思路错误,你认为delete()返回非true值时应该抛出一个异常,但是事实上delete()方法在删除报错时,内部已经先一步抛出了异常,也就是说,你的throw new Exception("订单删除失败");应该是不会触发的。

    恩,也只能先判断是否有数据依赖,没有再删除,有的话就禁止删除

  • 回复了 的回答

    php的错误和异常不是一个统一的概念,php有的错误是无法捕获的,比如致命错误和编译错误等,如果抛出的是这两种错误,你没办法。如果抛出的是警告、提醒等,好像通过设置是可以通过CException捕获的。

    恩,这个设计就是为了防止删除掉依赖数据,我才设置了外键,不能删除,依赖数据,在删除依赖数据的时候要报错,是自定义的用户报错,不应该是代码级别的报错呀。

  • 回复了 的回答

    可以先做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,而是数据库报错?

  • 提出了问题
    关联表的删除报错捕获
  • 2015-05-26 已签到
    连续签到3天,获得了15个金钱
  • 赞了评论

    为何不使用PHPEXCEL呢?亲

副总裁 等级规则
6685/10000
资料完整度
60/100
用户活跃度
0/100

Ta的关注

7

Ta的粉丝

22

Ta的访客

76