我为员工代码应用了唯一的验证。它适用于添加Emp 案例。但我不明白为什么它不适用于Update,这里是我用过的代码:
我的规则方法是:
public function rules()
{
return array(
array('is_active', 'numerical', 'integerOnly'=>true),
array('first_name, last_name, employee_code, username, password, role,joining_date,', 'required','on'=>array('create','update')),
array('employee_code', 'numerical', 'integerOnly'=>true),
array('employee_code', 'unique','on'=>array('create','update')),
array('employee_code', 'length', 'min' => 4, 'max'=>4, 'message'=>Yii::t("translation", "{attribute} is too short.")),
array('username','email'),
array('username','valid_username','on'=>array('create')),
array('username', 'required','on'=>array('forgotPassword')),
array('currentPassword, newPassword, newPasswordRepeat', 'required','on'=>array('change')),
array('newPassword', 'compare', 'compareAttribute'=>'newPasswordRepeat','on'=>array('change'),'message'=>'New and Confirm Password do not match.'),
array('verifyCode', 'captcha', 'allowEmpty'=>!CCaptcha::checkRequirements(),'on'=>array('forgotPassword')),
array('joining_date', 'safe'),
array('years', 'safe'),
array('user_id, first_name, last_name, employee_code, username, password, role, joining_date, pending_regular_leave, pending_medical_leave, allocated_regular_leave, allocated_medical_leave, is_active', 'safe', 'on'=>'search'),
);
请有人确定我错在哪里。请帮帮我。
答案 0 :(得分:0)
看起来字段“员工代码”的值放在表单字段中,并且您正在尝试保存它。它并不是唯一的,也不是保存。
无论如何,你可以:
$employee->validate(array('/* Here is list of attributes, except employee code */'));
或:
$employee->save(array('/* Here is list of attributes, except employee code */'));
更新操作。
您还可以删除验证规则中的方案:
array('employee_code', 'unique','on'=>array('insert');
答案 1 :(得分:0)
更新记录时,它已存在于数据库中,您要验证的值也已存在。这就是为什么当你做更新时,你应该从支票中排除你要更新的记录。否则,检查将失败并显示如下消息
员工守则"一些价值"已经被采取了。
例如(带有标准的新规则)
array(
'employee_code',
'unique',
'criteria' => array(
'condition' => 'user_id != :id',
'params' => array(':id' => $this->user_id),
),
'on' => array('create', 'update'),
),
我认为user_id
是主键。
正式地,您可能希望为update
和create
设置不同的方案,因为您不需要对create
方案进行任何其他检查。单一场景也可以,但您可能想要做这样的事情
array(
'employee_code',
'unique',
'on' => array('create'),
),
array(
'employee_code',
'unique',
'criteria' => array(
'condition' => 'user_id != :id',
'params' => array(':id' => $this->user_id),
),
'on' => array('update'),
),
P.S。正如其中一条评论中所述,您可能希望使用insert
而不是create
,因为默认情况下,新创建的模型的方案是insert
。这是更常用的名称。