cakephp обновить больше уникальных полей

У меня есть сайт, разработанный в cakephp. У меня есть модель под названием «Пользователь»:

class User extends AppModel { public $name = 'User'; public $validate = array( 'username' => array( 'not_empty' => array( 'rule'=> 'notEmpty', 'message'=> 'Username not empty' ) ), 'email' => array( 'email_invalid' => array( 'rule' => 'email', 'message' => 'Invalid mail' ), 'email_unique' => array( 'rule' => 'isUnique', 'message' => 'Mail already exist inside database' ) ) ); public function beforeSave(){ if (isset($this->data['User']['password'])){ $this->data['User']['password'] = AuthComponent::password($this->data['User']['password']); } } } 

В моем подтверждении у меня есть правила email_unique которые проверяют, присутствует ли в базе данных другое электронное сообщение.

Когда я обновляю пользователя, я делаю это внутри своего контроллера:

 $this->User->id = $this->request->data['User']['id']; if ($this->User->save($this->request->data)) { $this->redirect (array ('action'=>'index')); } else{ $this->Session->write('flash_element','error'); $this->Session->setFlash ('Error'); } 

Он всегда терпит неудачу, потому что электронная почта не уникальна, но является той же самой записью!

Я хотел бы знать, какой лучший способ избежать проверки, если сохранение – это обновление, а не создание? Или что-то вроде: проверьте, нет ли прав на редактирование страницы, или я не знаю. Может быть, есть много системы, я хотел бы знать, что является более правильным для моей проблемы.

благодаря

Related of "cakephp обновить больше уникальных полей"

Вы можете настроить свои правила проверки только для применения при создании новой записи, а не при обновлении существующей записи. Вы можете сделать это, установив ключ on в правиле проверки для create , чтобы он выглядел следующим образом:

 'email_unique' => array( 'rule' => 'isUnique', 'message' => 'Mail already exist inside database', 'on' => 'create' // Only apply this rule upon creation of a new record ) 

Дополнительную информацию см. В документации по этому вопросу.

Если вы также хотите заблокировать дублирование электронной почты при обновлении, создайте метод beforeSave в своей модели пользователя, ища адрес электронной почты:

 public function beforeSave($options = array()) { // If the email key is set in the data to be saved... if (isset($this->data[$this->alias]['email'])) { // Make sure the email is not already in use by another user if ($this->find('count', array( 'conditions' => array( $this->alias . '.id !=' => $this->data[$this->alias]['id'], $this->alias . '.email' => $this->data[$this->alias]['email'] ) )) > 0) { // The email is found for a user with another id, abort! return false; } } }