基本上,我有一段看起来像这样的代码:
$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'的错误修正,现在它正在运行。如果我设法找出导致它的原因,我会在这里更新。
答案 0 :(得分:1)
好的,所以我从(此时)未发布的2.8分支中添加了这个提交,修复了它:
https://github.com/cakephp/cakephp/commit/c6e5026767e07585d43ff63de397535d652c18cc
来自提交消息:
修复问题saveMany& saveAssociated with boolean values。 对于非原子,保存包含布尔模型的操作 领域。第一个错误值会导致保存中止。这个 在#6947中引入了回归。而不是检查数据 从save()我们应该是boolean casting save()来捕获 成功/失败。