我只是熟悉cakephp(感谢我之前的开发人员),并遇到了一些有趣的事情.我终于找到了什么问题,但仍然不知道为什么.在非常伪代码中:
控制器函数在同一范围内调用bar()两次:
$value = 'A';
$this->foo->bar($value);
// do other stuff
$value = 'B';
$this->foo->bar($value);
Run Code Online (Sandbox Code Playgroud)
bar()基本上只是调用cakephp的save()模型来将$ value写入表foobar $:
$AppModel->save(array(
'AppModel'=> array('value'=>$value)
));
Run Code Online (Sandbox Code Playgroud)
我期望save()会在foobar $中创建两行,但事实并非如此.它首先创建一个值为A的行,然后将该行更新为值B.当第二个调用运行时,它识别出前一个调用生成的DB id,确定它是相同的条目并使其成为更新而不是插入.这有点意义,但它们仍然是单独的电话,对吧?我在这里错过了什么明显的东西?非常感谢.
将内容保存到数据库后,Cake将设置$Model->id为最后一个插入ID.
保存时,如果id数据数组中有一个字段应该保存,或者如果设置了id $Model->id,那么Cake将更新此条目.这两个都更新了条目42:
$Model->save(array('id' => 42, 'value' => 'foo'));
$Model->id = 42;
$Model->save(array('value' => 'foo'));
Run Code Online (Sandbox Code Playgroud)
要确保您正在创建新条目,请Model::create()按此处所述进行呼叫.