Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Yii事务不工作_Yii - Fatal编程技术网

Yii事务不工作

Yii事务不工作,yii,Yii,我有如下代码: $transaction = Yii::app()->db->beginTransaction(); try { $film->save(); $idFilm = $film->id; //working at here $view = new ViewModel(); $view->type = 1; $view->id_films = $idFilm;

我有如下代码:

$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();
    }
但事务不起作用,即使视图未保存到数据库中,胶片也会保存到数据库中


有人能帮我吗?

当验证失败时,不会引发异常

if( ! $view->save()) {
    //$transaction->rollBack(); <---
    var_dump($view->getErrors());
}
在提交事务之前,您应该检查保存是否已成功完成

$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());
}

请解释你的代码是如何解决问题的,而不仅仅是一个代码块。