2010-02-08 81 views
1

我刚刚熟悉cakephp(感谢前面的开发人员),并且遇到了一些有趣的事情。我终于发现哪里出了问题,但仍然不知道为什么。在很伪代码:cakephp appmodel保存问题

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

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

巴()基本上只是调用CakePHP的保存()模型来写$值表foobar的$:

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

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

回答

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')); 

要确保你正在创建一个新的,请拨打Model::create(),如所描述here

2

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

插入:

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

更新

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