3

Yii 事务在以下示例代码中不会回滚,并且保存在 DB 中的记录:

        $transaction = Yii::app()->db->beginTransaction();
        $mode_1 = new Orders;
        $mode_1->id_order = 3333;
        $mode_1->AWB = 3333;
        $mode_2 = new Orders;
        $mode_2->id_order = 4444;
        $mode_2->AWB = 4444;
        $mode_2->save();
        $mode_1->save();
    $transaction->rollback();

任何的想法?.. 谢谢

4

2 回答 2

13

使用事务的正确方法是将它们与 try-catch 构造一起使用。在您的示例中,我认为问题出现是因为您没有执行提交 ($transaction->commit())。

$transaction = Yii::app()->db->beginTransaction();
try {
    if (!$model->save()) {
        throw new Exception('Model cannot be saved.');
    }
    if (!$anothermodel->save()) {
        throw new Exception('Anothermodel cannot be saved.');
    }

    $transaction->commit();
} catch (Exception $e) {
    $transaction->rollback();
}

编辑: $model->save() 不会抛出异常,所以你需要抛出它!

于 2013-10-14T14:53:17.700 回答
5

确保您的表的存储引擎是 InnoDB。我相信它是默认情况下唯一可用的事务安全引擎。有关mysql 文档中可用引擎的更多信息

于 2013-10-14T14:44:13.510 回答