我已经失去了一段时间了。我不使用Yii,我刚刚继承了一些遗留代码,我试图绕过它。 我正在使用活动记录将记录添加到数据库中。
代码是这样的:
$result = new Result();
$result->setIsNewRecord(true);
$result->SourceId = Sources::CIP;
$result->PartnerId = $partner->Id;
$result->Result = '<h1>'.$partner->Name.'</h1>'.$raport;
$result->ResultTypeId = empty($nasoale)?9:8;
$result->Enabled = 1;
$result->Date = date('Y-m-d H:i:s');
$result->CreationUserId = Yii::app()->params['sistemUser'];
$result->LastUpdateUserId = Yii::app()->params['sistemUser'];
$result->save();
这不会出错。它甚至具有“插入”查询的Id。问题是,它不在数据库中。在插入之后,我有另一个基于“PartnerId”和“SourceId”搜索的功能,它实际上找到了记录。我不知道怎么做,但确实如此。
我以相同的方式将其他内容插入到数据库中,在同一个表中我之前没有遇到此问题。
对此的任何帮助将不胜感激。
答案 0 :(得分:3)
听起来你有多个问题来自同一个core problem。
这很可能是因为事务已启动,但发生ROLLBACK
(或未发出COMMIT
)
如果表格中有AUTO_INCREMENT
字段且缺少行,则可以在某种程度上确认。
那是因为你不允许重复使用AUTO_INCREMENT值,这意味着如果你回滚或者没有提交,你就会“失去”这个值......
Read more here (specifically the first comment)
这很可能是由于isolation levels工作的方式。
如果辅助功能在同一个线程中运行并且是同一个事务的一部分,它将读取数据。
如果辅助功能 不在同一个线程中运行,但隔离级别允许脏读,它将读取数据。
如果您需要更多帮助,请在评论中大声说出来。
答案 1 :(得分:1)
检查之前保存模型。它必须返回true。
答案 2 :(得分:1)
通常你需要做一些这些步骤
if ($model->save()) { // do someting }
else { // do something other. u will find erros list here $model->errors;
或类似的东西
if ($model->validate()) { $model->save(false); }
else { // do something other }
差异是因为$ model-&gt; save()默认情况下首先执行验证,如果它通过则比保存。但在某些情况下,你会希望首先进行验证,如果一切正常,请保存,所以你可以通过false来保存以逃避验证。
在您的情况下,由于您没有CDbException,因此在数据库中保存不会出现问题,因此通常会出现模型规则问题。因此,我认为最好根据模型规则检查模型属性,甚至更好地针对数据库更好地建立模型规则,看看是否一切正常。如果save()返回false,U也可以通过在页面上打印$ model-&gt;错误来完成此操作。
我希望这会有所帮助。