【问题标题】:Foreign key and transaction外键和交易
【发布时间】:2015-05-28 12:32:33
【问题描述】:

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

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

【问题讨论】:

    标签: php yii transactions foreign-keys


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复,但还是不行。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2017-05-28
      • 2018-06-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 2013-10-06
      • 1970-01-01
      • 1970-01-01
      • 2020-08-27
      相关资源
      最近更新 更多