我的代码看起来像这样:
$transaction = Yii::app()->db->beginTransaction();
try {
$film->save();
$idFilm = $film->id; //working at here
$view = new ViewModel();
$view->type = 1;
$view->id_films = $idFilm;
$view->view_at = date('Y-m-d');
$view->save();//not working, not save view
$transaction->commit();
} catch (Exception $e) {
$transaction->rollBack();
}
但是交易无效,即使视图未保存到数据库,电影也会保存到数据库中
有人可以帮帮我吗?答案 0 :(得分:1)
验证失败时,不会出现异常。
在提交交易之前,您应该检查保存是否已成功完成。
$transaction = Yii::app()->db->beginTransaction();
$rollback = false;
$exception = null;
try {
if ($film->save()) {
$idFilm = $film->id;
$view = new ViewModel();
$view->type = 1;
$view->id_films = $idFilm;
$view->view_at = date('Y-m-d');
if ($view->save()) {
$transaction->commit();
}
else {
$rollback = true;
echo CHtml::errorSummary($view); // Error output, if $view validation or saving failed
}
}
else {
$rollback = true;
echo CHtml::errorSummary($film); // Error output, if $film validation or saving failed
}
}
catch (CDbException $e) {
$rollback = true;
$exception = $e;
}
catch (Exception $e) {
$rollback = true;
$exception = $e;
}
if ($rollback) {
$transaction->rollBack();
}
if (!is_null($exception)) {
throw new Exception($exception->getMessage(), $exception->getCode());
}
答案 1 :(得分:-1)
if( ! $view->save()) {
//$transaction->rollBack(); <---
var_dump($view->getErrors());
}