外键和交易

时间:2015-05-28 12:32:34

标签: php yii transactions foreign-keys

我在创建表组时尝试使用事务,而在使用关系user-group时使用表。 当我不使用事务时,它工作正常,因此属性的命名是正确的。这是代码:

            $db = Yii::app()->db; 
            $transaction = $db->beginTransaction();


            try {

                $model->attributes=$_POST['MyGroup'];

                $model->save();
                $model->refresh();

                $userMyGroup = new UserMyGroup();
                $userMyGroup->IDMyGroup = $model->IDMyGroup;
                $userMyGroup->IDUser    = Yii::app()->user->id;

                $userMyGroup->save();

                $transaction->commit();
            } catch (CDbException $ex) {
                Yii::log("Couldn't create group:".$ex->errorInfo[1], CLogger::LEVEL_ERROR);
                $transaction->rollback();
            }

错误是:

        The INSERT statement conflicted with the FOREIGN KEY constraint "FK_UserMyGroup_MyGroup". The conflict occurred in database "MyDatabase", table "dbo.MyGroup", column 'IDMyGroup'.. The SQL statement executed was: INSERT INTO [dbo].[UserMyGroup] ([IDMyGroup], [IDUser]) VALUES (:yp0, :yp1). Bound with :yp0=4022, :yp1=1

在使用外键保存第二个模型(userMyGroup)时,问题可能是保存的模型可能不在数据库中。如何正确地进行交易?

编辑:

我发现问题是由audit module引起的,它正在尝试记录查询,但不能像在事务中一样,并且还没有真正保存在数据库中。我试图弄清楚如何将这个交易与模块一起使用......

2 个答案:

答案 0 :(得分:0)

refresh方法使用最新数据重新填充活动记录。
虽然事务未提交,但最新数据是表中的现有数据。
$model->refresh();

之后移动$transaction->commit();

答案 1 :(得分:0)

我发现问题是由我使用的audit module造成的,它正在尝试记录查询,但不能像在交易中那样,而不是真的保存在数据库中。不幸的是,我没有弄清楚如何将此事务与模块一起使用,因此结果是禁用了事务中使用的类的审计模块。