CakePHP使储蓄模型数据提前。数据可以保存应该传递给模型的save()方法使用以下基本格式:
Array
(
[ModelName] => Array
(
[fieldname1] => 'value'
[fieldname2] => 'value'
)
)
大多数时候你甚至不需要担心这种格式:CakePHP的FormHelper,模型在这种格式找到方法所有包数据。如果你使用的帮手,可用的数据也方便在$this->request->data 快速使用。
这里有一个快速的例子使用CakePHP模型的控制器动作数据保存在一个数据库表:
public function edit($id) {
// Has any form data been POSTed?
if ($this->request->is('post')) {
// If the form data can be validated and saved...
if ($this->Recipe->save($this->request->data)) {
// Set a session flash message and redirect.
$this->Session->setFlash('Recipe Saved!');
return $this->redirect('/recipes');
}
}
// If no form data, find the recipe to be edited
// and hand it to the view.
$this->set('recipe', $this->Recipe->findById($id));
}
保存时,数据传递给它的第一个参数是验证使用CakePHP的验证机制(有关更多信息,请参见数据验证章)。如果由于某种原因您的数据没有保存,一定要检查,看看一些验证规则被打破了。您可以通过输出模型调试这种情况::$ validationErrors:
if ($this->Recipe->save($this->request->data)) {
// handle the success.
}
debug($this->Recipe->validationErrors);
还有其他一些save-related模型中,你会发现有用的方法:
Model::set($one, $two = null)
Model::set()可用于设置一个或多个字段的数据模型内部数据数组。这是有用的在使用ActiveRecord模型与功能提供的模型:
$this->Post->read(null, 1);
$this->Post->set('title', 'New title for the article');
$this->Post->save();
是如何使用的一个示例set()来更新单一领域,在一个ActiveRecord的方法。您还可以使用set()为新值分配给多个字段:
$this->Post->read(null, 1);
$this->Post->set(array(
'title' => 'New title',
'published' => false
));
$this->Post->save();
上面会更新标题和发布字段和记录保存到数据库中。
Model::clear()
该方法可用于重置模型状态和清除任何未保存的数据,验证错误。