CakePHP,model->save() 在 model->read() 之后,字段“修改”不是自动设置的,尽管数据中


CakePHP, model->save() after model->read(), field "modified" not automagically set though not present in data

在 CakePHP 2.3 项目中,在其中一个控制器操作中,我想更新表的几条记录。要更新的数据作为数组发布,我遍历该数组。

但是,一些新字段值与当前字段值相关,因此我不能简单地将数据写入数组$data并进行模型保存($data)。相反,我这样做

$record = model->read(null, $id); //$id is retrieved from the posted data array. 
$record['some_field'] = $new_value;
unset($record['modified']);
//in addition I used model->modified = null;, but to no avail
model->save($record);

问题是,修改的字段不会自动更新。在 CakePHP 文档中,我发现"修改"的值不能出现在要保存的数据中。但是仅靠unset()似乎还不够。

在 cakePHP - 修改字段不更新用户 tadasZ 提到当你提前使用 model->read() 时它不起作用。

我在文档中找不到任何关于它的内容。但是,如果是这样的话,有没有办法将Automagic用于修改后的字段?我可以设置字段值myswlf(事实上,现在这就是我作为解决方法所做的),但如果有自动方法,我想使用它。

当你使用Model::read()时,结果仍然是相同的 CakePHP 格式$array['Model']['field']所以你必须做unset($record['Model']['modified']);

答案在这里:http://book.cakephp.org/2.0/en/models/saving-your-data.html#using-created-and-modified

如果您在 Model::save() 之前在 $this->data 中创建或修改了数据(例如,来自 Model::read 或 Model::set),则这些值将从 $this->data 中获取,而不是自动更新。如果你不想这样做,你可以使用 unset($this->data['Model']['modified'])等。