基本上,我有一段代码如下所示:
$this->ModelName->id = $id;
$this->ModelName->save(
array('ModelName'=>array(
'boolean_column1'=>1,
'boolean_column2'=>0,
'string_column'=>'Some short string[always the same]'
)));
有时此保存失败。因此,我添加了以下内容:
debug($this->ModelName->validationErrors);
debug($this->ModelName->invalidFields());
结果是:
########## DEBUG ##########
array(
(int) 0 => array()
)
###########################
########## DEBUG ##########
array(
(int) 0 => array()
)
###########################
当我将“validate”参数设置为false时,就不会发生这种情况。我还尝试过以一种没有“ModelName”键的方式更改save数组,但没有任何帮助。
此模型中没有任何beforeSave或afterSave回调,也没有$validate设置。此调用中保存了更多字段,但这是在更新数据库表中的现有行。
这是在队列中循环运行的代码,作为长达一小时的cron作业的一部分。我在不同的运行中看到了不同的行为,这可能是由于其他排队函数改变了导致问题的东西,但我没有看到,如果没有可读的错误消息,很难找到。这在从2.4. x升级到2.7.0后开始发生,并且从1.3. x开始运行良好。
更新1:好的,我已经更新了模型。php文件到未发布的2.8分支中的版本,该分支包含一个针对“atomic”的错误修复,它现在正在工作。如果我能找到确切的原因,我会在这里更新。
好的,所以我从(目前)未发布的2.8分支添加了这个提交,该分支修复了它:
https://github.com/cakephp/cakephp/commit/c6e5026767e07585d43ff63de397535d652c18cc
来自提交消息:
修复问题保存很多