2012-04-12 52 views
1

如何讓Cake使用REPLACE INTO而不是INSERT INTO?我有一個將數據保存到數據庫的操作,但我不想重複輸入。主鍵(id)是唯一的,如果該值已經存在,我不希望它作爲新行被輸入。CakePHP:覆蓋現有的重複數據

正在保存的數據也是動態生成的,所以退出時出錯並不合適。

編輯 Initally我保存的數據是在一個單一的大陣

$data = Array([0] => 'value1', [1] => 'value2', [2] => 'value3') etc 

我通過這個數組試圖循環,節省了每個值作爲一個新的記錄

foreach ($data as $value) { 
    $save_data['Model'] = array('field' => $value); 
} 
Classregistry::init('Model')->saveAll($save_data); 

我正在使用Classregistry,因爲我正在將數據保存到不同的模型。目前,當試圖插入重複記錄時,此代碼會變得很糟糕,因爲'field'是唯一的索引。在使用CakePHP之前,我只是使用了REPLACE INTO語法而沒有任何問題。我想在Cake中實現類似的功能。

我目前唯一的解決辦法是允許輸入重複的,但只有將它們分組顯示唯一行。

回答

0

指定數據的主鍵:

// create a new record 
$this->Model->create(); 
$this->Model->save(array(
    'Model' => array(
    'name' => 'new record' 
) 
)); 

// update it 
$this->Model->save(array(
    'Model' => array(
    'id' => $id, 
    'name' => 'updated record' 
) 
)); 

在你編輯的觀點,簡單地說:

echo $this->Form->input('id'); // or your custom PK field 
+0

值得注意的有這樣做的其他方式,如前設置模型上的'id' PARAM做保存。 – jeremyharris 2012-04-12 15:40:07

+1

我不確定我是否清楚。我有大量未知大小的數據。我想循環數組並將每個條目保存爲新記錄,但避免插入重複項。 – Robert 2012-04-12 15:45:07

+0

同樣的想法適用。你怎麼知道它是獨一無二的?你在大陣中有身份證嗎?如果是這樣,請使用它。否則,你需要循環查找其他一些獨特的字段。您可能需要更改您的問題,幷包含可能的數組值的片段。 – jeremyharris 2012-04-12 15:47:45

0

在CakePHP 3.0沒有$這個 - >模型 - >創建() ;它會返回你未定義的錯誤。

,我們可以通過將數據類似像下面

foreach($sizeCategories as $sizeData){ 
 
\t 
 
\t $iteamData['Item_Code'] \t \t = 'abc-'.$sizeData->sizes_id; 
 
\t $iteamData['Item_Desc'] \t \t = ''; 
 
\t $iteamData['Article_ID'] \t = 0; 
 
\t $iteamData['ColorId'] \t \t = $colorData; 
 
\t $iteamData['CreatedBy'] \t = $this->request->session()->read('Auth.User.id'); 
 
\t $iteamData['CreatedDate'] \t = Time::now(); 
 
\t $iteamData['UpdateDate'] \t = Time::now(); 
 
\t $iteamData['Status'] \t \t = '1'; 
 
\t 
 
\t // Generaly we used $this->ItemMaster->patchEntity($itemMaster, $iteamData); that will update the data and overwrite the same entry again & again we should use the $this->ItemMaster->newEntity($iteamData); \t 
 
\t // save data in loop 
 
\t $itemMaster = $itemMaster = $this->ItemMaster->newEntity($iteamData); \t \t \t 
 
\t 
 
\t if ($this->ItemMaster->save($itemMaster)) { 
 
\t \t $this->Flash->success(__('The products has been generated.')); 
 
\t }else{ 
 
\t \t $this->Flash->error(__('The products could not be generate. Please, try again.')); 
 
\t } 
 
}