提问者:小点点

CakePHP 2.7 save()失败,validationErrors中只有一个空键


基本上,我有一段代码如下所示:

$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”的错误修复,它现在正在工作。如果我能找到确切的原因,我会在这里更新。


共1个答案

匿名用户

好的,所以我从(目前)未发布的2.8分支添加了这个提交,该分支修复了它:

https://github.com/cakephp/cakephp/commit/c6e5026767e07585d43ff63de397535d652c18cc

来自提交消息:

修复问题保存很多