cakephp appmodel保存问题

时间:2010-02-08 09:26:44

标签: cakephp

我只是熟悉cakephp(感谢我之前的开发人员),并遇到了一些有趣的事情。我终于找到了什么问题,但仍然不知道为什么。在非常伪的代码中:

控制器函数在同一范围内调用bar()两次:

$value = 'A';
$this->foo->bar($value);
// do other stuff
$value = 'B';
$this->foo->bar($value);

bar()基本上只是调用cakephp的save()模型来将$ value写入表foobar $:

$AppModel->save(array(
  'AppModel'=> array('value'=>$value)
));

我预计save()会在foobar $中创建两行,但事实并非如此。它首先创建一个值为A的行,然后将该行更新为值B.当第二个调用运行时,它识别出前一个调用生成的DB id,确定它是相同的条目并使其成为更新而不是插入。这有点意义,但它们仍然是单独的电话,对吧?我在这里错过了什么明显的东西?非常感谢。

2 个答案:

答案 0 :(得分:5)

将某些内容保存到数据库后,Cake会将$Model->id设置为最后一个插入ID。

保存时,如果数据数组中有id字段,则应该保存,或者如果$Model->id上设置了id,则Cake会更新此条目。这两个都更新了条目42:

$Model->save(array('id' => 42, 'value' => 'foo'));

$Model->id = 42;
$Model->save(array('value' => 'foo'));

要确保您创建新条目,请按照here所述,致电Model::create()

答案 1 :(得分:2)

我通常总是在保存之前进行模型创建调用。如果您保存的数组已经具有主键,则它将更新该行,否则它将执行插入:

插入:

$Model->create();
$Model->save(array('value'=>'foo'));

更新

$Model->create();
$Model->save(array('id'=>1,'value'=>bar'));