2010-02-08 68 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'));