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

CakePHP 2.7 save()失败,validationErrors中只有一个空键,php,cakephp,Php,Cakephp,基本上,我有一段代码如下所示: $this->ModelName->id = $id; $this->ModelName->save( array('ModelName'=>array( 'boolean_column1'=>1, 'boolean_column2'=>0, 'string_column'=>'Some short string[always the same]' )));

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

$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:好的,我已经将Model.php文件更新为未发布的2.8分支中的版本,其中包括“atomic”的错误修复,现在可以使用了。如果我能准确地找出原因,我会在这里更新。

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

从提交消息:

修复与布尔值关联的saveMany&saveMany问题。 对于非原子,保存包含布尔值模型的操作 领域。第一个假值将导致保存中止。这 回归是在年引入的。而不是检查数据 从save()开始,我们应该对save()进行布尔运算,以捕获 成功/失败


请使用真实的名称,您的模型不是模型(或者如果是,这是有问题的),使用该名称会令人困惑。建议向我们展示代码,以便我们能够提供帮助,而不是假设更改内容也会使其变得简单。@AD7six,这很公平。我已经用“ModelName”替换了它,这应该更有意义。@MattStephens这是一个大代码库的一部分,我真的不能全部粘贴在这里。这些就是我将问题缩小到的范围,我目前正在将var_转储放在Cake core中,以查看它无法准确验证的地方。另外,我将尝试更新到2.8.x,看看这是否会改变什么,然后再报告。@NickZinger问题是,它可能不是你已经缩小范围的地方,没有冒犯,但作为一名开发人员,有时你可以忽略一些事情。这三个字段是唯一保存在那里的字段吗?