我在创建表组时尝试使用事务,而在使用关系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引起的,它正在尝试记录查询,但不能像在事务中一样,并且还没有真正保存在数据库中。我试图弄清楚如何将这个交易与模块一起使用......
答案 0 :(得分:0)
refresh
方法使用最新数据重新填充活动记录。
虽然事务未提交,但最新数据是表中的现有数据。
在$model->refresh();
$transaction->commit();
答案 1 :(得分:0)
我发现问题是由我使用的audit module造成的,它正在尝试记录查询,但不能像在交易中那样,而不是真的保存在数据库中。不幸的是,我没有弄清楚如何将此事务与模块一起使用,因此结果是禁用了事务中使用的类的审计模块。