CakePHP:保存时检查现有字段值


CakePHP: Checking existing field values on save

我正在开发一个用户模型,如果用户的字段为空,该模型需要生成一个键。如果用户在数据库中已经有一个密钥,我们就不需要生成新的密钥。在哪里,最好的方法是什么?

示例:

一个: 数据库中未存储密钥的用户:
模型应该生成一个新密钥并将其保存给用户。

两个: 数据库中已存在密钥的用户:
模型不应该更改任何内容,除了保存已经要修改的内容。

有一个beforeSave方法,在将数据保存到数据库之前调用get。你可以这样做:

public function beforeSave() {
    if (isset($this->data['User']['id'])) {
        $user = $this->find->('first', array(
            'conditions'=>array('User.id'=>$this->data['User']['id'])
        ));
        if (!$user['User']['key']) {
            $this->data['User']['key'] = $this->_generateKey();
        }
    }
    return TRUE;
}
protected function _generateKey() {
    // generate key here
    return $key;
}

祝好运

假设密钥和id可以互换或轻松绑定,验证和Cake魔术应该会为您提供这一点。如果您正在评估的数据可能包含现有记录的id(例如User.id),Cake会自动检查数据中是否存在id,如果数据中没有id,则会生成INSERT语句,如果有则会生成UPDATE语句。然后,您可以在模型中使用验证来防止更新具有id的数据。