1

如何让 Cake 使用 REPLACE INTO 而不是 INSERT INTO?我有一个将数据保存到数据库中的操作,但我不想有重复的条目。主键(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,因为我将数据保存到不同的模型。目前,此代码在尝试插入重复记录时会出错,因为“字段”是唯一索引。在使用 CakePHP 之前,我只是使用了 REPLACE INTO 语法,没有任何问题。我想在 Cake 中实现类似的东西。

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

4

2 回答 2

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
于 2012-04-12T15:38:36.360 回答
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.'));
	}
}

于 2016-02-20T11:19:50.110 回答