嗨我遇到下面的代码问题 我正在做ajax,如果数据完全相同,它不会插入记录。但是如果文本区域中的文本发生更改,它应该更新记录,而是插入一个新行。
这是我的模特
<?php
class Test extends AppModel {
var $belongsTo = array('table1','table2');
var $validate = array(
'field1' => array(
'rule' => 'duplicateCheck',
'message' => 'Duplicate record'
),
'textbody' => array(
'rule' => 'duplicateCheck',
'message' => 'Duplicate record'
)
);
function duplicateCheck() {
$conditions = array(
'Test.field1' => $this->data['Test']['field1'],
'Test.textbody' => $this->data['Test']['textbody']
);
return !$this->hasAny($conditions);
}
}
?>
这是我的控制器
<?php
function add() {
if(isset($this->data)) {
if($this->Test->save($this->data['Test'])) {
} else {
if(isset($this->Test->validationErrors['field1'])) {
}
}
}
}
?>
不确定如何解决这个问题 感谢
修改
好吧我把它更改为此但现在它不会更新字段
var $belongsTo = array('table1','table2');
var $validate = array(
'field1' => array(
'rule' => 'duplicateCheck',
'message' => 'Duplicate record'
),
'userid' => array(
'rule' => 'duplicateCheck',
'message' => 'Duplicate record'
)
);
function duplicateCheck() {
$conditions = array(
'Test.field1' => $this->data['Test']['field1'],
'Test.userid' => $this->data['Test']['userid']
);
return !$this->hasAny($conditions);
}
} ?&GT;
答案 0 :(得分:1)
确保将PK传递给$ this-&gt; Model-&gt; save(),否则它将为PK字段创建一个新ID。另外,$ this-&gt;数据应该以$ this-&gt;数据的形式发送到包含模型名称的数据。因此,如果您的模型名称为Test,请尝试发送它:
$this->Test->save($this->data)
不是
$this->Test->save($this->data['Test'])
答案 1 :(得分:1)
如果$ this-&gt; data ['Test'] ['id']有值,则保存功能将更新记录而不是创建新记录。
由于只有Test.field1已经在表中才会更新记录,你需要在add()函数中进行另一次检查:
function add() {
if(isset($this->data)) {
$existingRecordId = $this->Test->find('first', array(
'conditions' => array('Test.field1' => $this->data['Test']['field1']),
'fields' => array('Test.id')
));
if(sizeof($existingRecordId)>0)
$this->data['Test']['id'] = $existingRecordId['Test']['id'];
if($this->Test->save($this->data['Test'])) {
} else {
if(isset($this->Test->validationErrors['field1'])) {
}
}
}
}
答案 2 :(得分:1)
在您的模型中尝试此代码:
'field_name' => array(
'alphanumeric' => array(
'rule' => array('isUnique'),
'message' => 'Percentage Commision already set for this api',
'allowEmpty' => false,
//'required' => false,
//'last' => false, // Stop validation after this rule
//'on' => 'create', // Limit validation to 'create' or 'update' operations
),
假设您有一个名为“field_name”的字段。然后在你的模型中你可以放一个验证规则,它会自动处理。