外键和事务

Foreign key and transaction

我正在尝试在创建 table 组和 table 关系用户组时使用事务。 当我不使用事务时它工作正常,所以属性的命名是正确的。这是代码:

            $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 引起的,它正在尝试记录查询,但不能,因为它在事务中并且尚未真正保存在数据库中。我正在尝试弄清楚如何将此事务与模块一起使用...

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

之后移动 $model->refresh();

我发现问题是由我正在使用的 audit module 引起的,它正在尝试记录查询,但不能,因为它在事务中并且尚未真正保存在数据库。不幸的是,我没有弄清楚如何将此交易与模块一起使用,所以结果是在交易中使用的 类 上禁用审计模块。