YII活动记录未插入数据库但未给出错误

时间:2014-07-11 08:06:55

标签: php mysql yii

我已经失去了一段时间了。我不使用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”搜索的功能,它实际上找到了记录。我不知道怎么做,但确实如此。

我以相同的方式将其他内容插入到数据库中,在同一个表中我之前没有遇到此问题。

对此的任何帮助将不胜感激。

3 个答案:

答案 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;错误来完成此操作。

我希望这会有所帮助。