我有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,把有外键依赖的关系表中的数据先删除,类似
可不可以关联修改?