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


CakePHP 2.7 save() failing with a single empty key in 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'键的方式改变保存数组,但它没有帮助。

在这个模型中没有任何beforeSave或afterSave回调,也没有一个$validate设置。在这个调用中有更多的字段被保存,但这是更新数据库表中的现有行。

这是作为一个小时的cron作业的一部分在Queue中循环运行的代码。我在不同的运行中看到不同的行为,这可能是由于其他排队函数改变导致问题的东西,但我没有看到它,而且如果没有可读的错误消息,很难找到。这是在从2.4升级到2.7.0之后开始发生的。

UPDATE 1:好的,所以我已经将Model.php文件更新到未发布的2.8分支中的版本,其中包括对'atomic'的错误修复,现在它正在工作。如果我设法找出导致它的确切原因,我会在这里更新。

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

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

来自提交消息:

修复saveMany &与布尔值相关联。对于非原子,保存包含布尔值模型的操作字段。第一个假值将导致保存中止。这回归在#6947中被引入。而不是检查数据从save()中,我们应该对save()进行布尔强制转换以捕获成功/失败。

相关文章:
  • 没有找到相关文章