谁一开始就是大神?

关联表的删除报错捕获[1.0]

我有a表和b表,他们有关联关系,b表是a表的外表,当我删除b中的内容时,会报代码级别的错误,那我怎样通过异常抛出来捕获异常,而不是报代码级别的错误?

以下是代码:

public function actionRequirementDelete($id,$page)
{
    $page = $page + 1;
    $requirement_data = Requirement::model()->findByPk($id);
    
    $transaction = $requirement_data->dbConnection->beginTransaction();
    try{
        if($requirement_data->delete()){
            $this->redirect(array('/user/employer','page'=>$page));
        }else{
            throw new Exception("订单删除失败");
        }
        $transaction->commit();
    }catch (Exception $e){
        $transaction->rollback();
        echo $e->getMessage();
    }
}

你的这个需求,其实有好几种解决方式:
1.是否一定需要报错?是否可以考虑在数据库里设置一下外键删除时的动作,比如CASCADE ?
2.如果按你说的,你需要删除时判断是否有从属数据,那么你应该先判断从属数据是否存在,而不是通过异常去处理,因为异常出现的可能性很多,不一定是因为存在从属数据导致。
3.我看到了你的异常捕获,
这种形式是正确的,但是你的思路错误,你认为delete()返回非true值时应该抛出一个异常,但是事实上delete()方法在删除报错时,内部已经先一步抛出了异常,也就是说,你的throw new Exception("订单删除失败");应该是不会触发的。
心有余而力不足,唉,不会
自定义一个exception 比如UserException 或者OrderException等等,然后只捕获这个异常 ,其他的异常让系统处理去吧
php的错误和异常不是一个统一的概念,php有的错误是无法捕获的,比如致命错误和编译错误等,如果抛出的是这两种错误,你没办法。如果抛出的是警告、提醒等,好像通过设置是可以通过CException捕获的。
可以先做unlinkAll,把有外键依赖的关系表中的数据先删除,类似
可不可以关联修改?

赞(0) 打赏
未经允许不得转载:菜鸟之家 » 关联表的删除报错捕获[1.0]

评论 抢沙发

登录

找回密码

注册