如何让Cake使用REPLACE INTO而不是INSERT INTO?我有一个将数据保存到数据库中的操作,但我不希望有重复的条目。主键(id)是唯一的,如果值已经存在,我不希望它作为新行输入。
正在保存的数据也是动态生成的,因此退出错误是不合适的。
EDIT 最初我保存的数据是一个大型数组
$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 :(得分: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
答案 1 :(得分:0)
在cakephp 3.0中没有$ this-> Model-> create();它会返回你未定义的错误。
我们可以通过传递类似下面的数据
来实现
foreach($sizeCategories as $sizeData){
$iteamData['Item_Code'] = 'abc-'.$sizeData->sizes_id;
$iteamData['Item_Desc'] = '';
$iteamData['Article_ID'] = 0;
$iteamData['ColorId'] = $colorData;
$iteamData['CreatedBy'] = $this->request->session()->read('Auth.User.id');
$iteamData['CreatedDate'] = Time::now();
$iteamData['UpdateDate'] = Time::now();
$iteamData['Status'] = '1';
// 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);
// save data in loop
$itemMaster = $itemMaster = $this->ItemMaster->newEntity($iteamData);
if ($this->ItemMaster->save($itemMaster)) {
$this->Flash->success(__('The products has been generated.'));
}else{
$this->Flash->error(__('The products could not be generate. Please, try again.'));
}
}