我有我的控制器actionCreate这段代码是通过Ajax调用:
if ($model->save() === true)
{
echo CJSON::encode(array('id' => $model->id);
Yii::app()->end();
}
这将返回{ “ID”:空}到我的对话框中,并且在数据库中没有创建任何记录,并且Yii没有记录任何记录。这已经工作了很长时间,我看不到任何我曾经做过的在git日志中打破它。什么会造成这种情况?
我有我的控制器actionCreate这段代码是通过Ajax调用:
if ($model->save() === true)
{
echo CJSON::encode(array('id' => $model->id);
Yii::app()->end();
}
这将返回{ “ID”:空}到我的对话框中,并且在数据库中没有创建任何记录,并且Yii没有记录任何记录。这已经工作了很长时间,我看不到任何我曾经做过的在git日志中打破它。什么会造成这种情况?
我在发帖后不久就自己解决了。
我在模型中添加了自己的构造函数,但忘记在最后调用父构造函数。 isNewRecord属性的默认值为false,但在没有运行的构造函数中设置为true,因为我忘记了调用它。这意味着它试图在save()中运行UPDATE而不是INSERT。所以我只是添加了调用父类的构造...
public function __construct($scenario = 'insert')
{
//some stuff
parent::__construct($scenario);
}
不要忘记$情况下,重要的是...:P
有人可能会说的Yii应该做的事情,如果UPDATE语句不会影响任何行,但... .../
$model->id
可能尚未使用新ID填充save()
。
改为使用$model->primaryKey
。
在模型中使用beforeSave
吗?然后确保它返回它的beforeSave
的父:
return parent::beforeSave();
我知道你的问题就解决了,但我认为这是可以做到更好。
初始化$模型这样,如果该方案是插入
$model = new Type;
初始化$模型这样,如果该方案被读取,更新或删除
$model = Type::model()->findByPk($id);
我有同样的问题,我意识到我做错了什么事是
$model = Type::model(); /* this is wrong */
另一个难以捉摸的原因可能是一个开放交易不被“承诺”。我有这样一个问题:在代码运行的前一阶段的一个打开的事务是而不是提交,导致在请求处理完成(成功与否 - 没有提交执行隐式回滚)时恢复数据库的所有更改。
哎呀,即使DB日志文件显示所有'插入'正确。它只有当我在日志“开始事务”中看到我已经变得可疑时,才在调试和观察代码流时确认我的怀疑。
您是否在代码中使用了事务? –
你可以发布你的模型代码吗? –
尝试使用'if($ model-> save){} else {print_r($ model-> getErrors());}' –