CakePHP 2.7 save()在validationErrors

时间:2015-08-07 13:27:04

标签: 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]'
)));

有时这种保存失败了。所以我添加了以下内容:

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作业的一部分在队列中循环运行的代码。我在不同的运行中看到不同的行为,这可能是由于其他排队的函数改变了导致问题的东西,但我没有看到它,并且没有可读的错误消息很难找到。这是从2.4.x升级到2.7.0后开始发生的,并且自1.3.x以来一直运行良好。

UPDATE 1 :好的,所以我将Model.php文件更新为未发布的2.8分支中的版本,其中包含'atomic'的错误修正,现在它正在运行。如果我设法找出导致它的原因,我会在这里更新。

1 个答案:

答案 0 :(得分:1)

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

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

来自提交消息:

  

修复问题saveMany& saveAssociated with boolean values。   对于非原子,保存包含布尔模型的操作   领域。第一个错误值会导致保存中止。这个   在#6947中引入了回归。而不是检查数据   从save()我们应该是boolean casting save()来捕获   成功/失败。