在CakePHPs博客教程中,将通过以下操作保存帖子:
public function add()
{
if ($this->request->is('post'))
{
$this->Post->create();
if ($this->Post->save($this->request->data))
{
$this->Session->setFlash(__('Your post has been saved.'));
return $this->redirect(array('action' => 'index'));
}
$this->Session->setFlash(__('Unable to add your post.'));
}
}
我真的不明白Cookbook中描述的$this->Post->create();
的目的:
[...]重置模型状态以保存新信息。它不是 实际上在数据库中创建一条记录,但清除了Model :: $ id [...]
(在Cookbook 2.x找到)
如果create();
无法清除Model :: $ id,会发生什么?
答案 0 :(得分:1)
我理解你的问题(现在)意味着:
我可以在此代码示例中省略创建调用:
Model::create将模型重置为一致状态,删除data属性并将id重置为null。
如果模型已被修改,此方法仅执行某些操作;如果模型状态没有被修改,或者它是第一个被调用的动作方法,它将不会做任何事情 - 但是当现有模型状态与下一个模型状态无关时,总是调用create
是一个好习惯。模型方法调用,可以防止意外的应用程序错误。
答案 1 :(得分:0)
根据您在问题中提供的代码,您可以删除Model :: create()。它不会影响数据插入。
但是当你在循环中插入记录时,清除Model :: $ id很重要。因为如果不这样做,将只插入一条记录,并用下一条记录覆盖。
例如,
$posts = array(
0 => array(
'title' => "Title one"
),
1 => array(
'title' => "Title two"
),
2 => array(
'title' => "Title three"
)
);
foreach($posts as $post) {
$this->Post->create(); // Or you can use $this->Post->id = null;
$this->Post->save($post);
}
如果您删除$ this-> Post-> create(),首次执行时会插入标题为“Title one”的新记录,并将最后一个插入ID设置为Model :: $ id,例如21.在第二次执行时,因为我们还没有清除Model :: $ id,它将使用标题“Title 2”更新记录,而不是将其作为新记录插入,依此类推。 最后,您将只获得一个ID为21的记录,其标题值为“Title 3”。
这只是一个例子,还有其他方法可以在没有循环的情况下保存多个记录。
希望这会有所帮助。