CakePHP:覆盖现有的重复数据

CakePHP:覆盖现有的重复数据,cakephp,duplicates,overwrite,Cakephp,Duplicates,Overwrite,我怎样才能让蛋糕使用替换而不是插入?我有一个将数据保存到数据库的操作,但我不希望有重复的条目。主键(id)是唯一的,如果该值已经存在,我不希望它作为新行输入 正在保存的数据也是动态生成的,因此带错误退出是不合适的 编辑 最初,我保存的数据是在一个大数组中 $data = Array([0] => 'value1', [1] => 'value2', [2] => 'value3') etc 我试图循环遍历这个数组,将每个值保存为一个新记录 foreach ($data as

我怎样才能让蛋糕使用替换而不是插入?我有一个将数据保存到数据库的操作,但我不希望有重复的条目。主键(id)是唯一的,如果该值已经存在,我不希望它作为新行输入

正在保存的数据也是动态生成的,因此带错误退出是不合适的

编辑 最初,我保存的数据是在一个大数组中

$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,没有任何问题。我想在蛋糕上做点类似的事情


目前我唯一的解决方法是允许输入重复项,但仅通过分组显示唯一的行。

在数据中指定主键:

// 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

在CakePHP3.0中没有$this->Model->create();它将返回未定义的错误

我们可以通过如下类似的方式传递数据来实现

foreach($sizeCategories作为$sizeData){
$iteamData['Item_Code']=“abc-”。$sizeData->SizedU 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';
//通常我们使用$this->ItemMaster->patchEntity($ItemMaster,$iteamData);这将更新数据并再次覆盖相同的条目&我们应该再次使用$this->ItemMaster->newEntity($iteamData);
//在循环中保存数据
$itemMaster=$itemMaster=$this->itemMaster->newEntity($iteamData);
如果($this->ItemMaster->save($ItemMaster)){
$this->Flash->success(_('产品已生成');
}否则{
$this->Flash->error(_('无法生成产品。请重试');
}

}
值得注意的是,还有其他方法可以做到这一点,例如在保存之前在模型上设置
id
参数。我不确定我是否清楚。我有大量未知大小的数据。我希望循环数组并将每个条目保存为新记录,但避免插入重复项。同样的想法也适用。你怎么知道它是否独一无二?你有大数组中的id吗?如果是的话,就用这个。否则,您需要循环并通过其他唯一字段进行查找。您可能需要重新表述您的问题,并包含一段可能的数组值。