Validation 使用$model时使用CakePHP->;save()验证规则并跳过其他规则

Validation 使用$model时使用CakePHP->;save()验证规则并跳过其他规则,validation,cakephp,cakephp-2.0,Validation,Cakephp,Cakephp 2.0,我使用的是CakePHP 2.0,我有一个模型,我对它进行了如下验证: var $validate = array( 'title' => array( 'unique_rule'=>array( 'rule' => 'isUnique', 'on' => 'create', 'message' => 'This title has already been taken

我使用的是CakePHP 2.0,我有一个模型,我对它进行了如下验证:

 var $validate = array(
    'title' => array(
        'unique_rule'=>array(
            'rule' => 'isUnique',
            'on' => 'create',
            'message' => 'This title has already been taken.'
        ),
        'required_rule'=>array(
            'required' => true,
            'allowEmpty' => false,
            'message' => 'The title field is required.'
        )
    )
 );
,在控制器中,我有一个编辑操作,我使用$model->save()保存来自$this->request->data的日期,但它没有通过isUnique验证规则,尽管它不是新记录插入。
有没有办法指定它是现有记录,而不是新记录?

如果我答对了问题,您必须在调用
$model->save()之前设置模型的ID因此cakephp知道这是一个更新

见:

创建或更新由模型的id字段控制。如果设置了$model->id,则会更新具有此主键的记录。否则会创建新记录:


您的验证数组错误您没有为
'required\u rule'
设置规则,该规则可能会触发
isUnique
错误消息

var $validate = array(
'title' => array(
    'unique_rule'=>array(
        'rule' => 'isUnique',
        'on' => 'create',
        'message' => 'This title has already been taken.',
        'last' => true
    ),
    'required_rule'=>array(
       'rule' => array('notEmpty'),             
        'message' => 'The title field is required.'
    )
)
);

还请记住,使用
required=>true
不会对实际数据进行结果检查,它只希望字段出现在数据数组中,“”也被视为存在

控制器的编辑函数应以$id作为参数(
函数编辑($id=null)
,该函数的第一行应该是
$this->YourModelName->id=$id;
Cake应该执行MySQL更新,而不是插入。MySQL日志是否显示请求id的
更新
?它从一开始就已经完成了,它不会更新插入,但会触发“是唯一的”验证规则,尽管指定了“on”=>“create”在model validation rule.btw中:您的顺序是错误的,您应该使用last=>true。如果没有任何输入,则无需调用数据库进行唯一检查
var $validate = array(
'title' => array(
    'unique_rule'=>array(
        'rule' => 'isUnique',
        'on' => 'create',
        'message' => 'This title has already been taken.',
        'last' => true
    ),
    'required_rule'=>array(
       'rule' => array('notEmpty'),             
        'message' => 'The title field is required.'
    )
)
);