У меня есть база данных с моделью пользователя. Эти пользователи должны быть уникальными по имени и дню рождения. Так что я написал пользовательскую функцию проверки под названием checkUniqueCakePHP custom Validation проверяет уникальную комбинацию полей только при создании
public function checkUnique($check){
$condition = array(
"User.name" => $this->data["User"]["name"],
"User.lastname" => $this->data["User"]["lastname"],
"User.birthday" => $this->data["User"]["birthday"]
);
$result = $this->find("count", array("conditions" => $condition));
return ($result == 0);
}
Правило валидации в модели:
"name" => array(
"checkUnique" => array(
"rule" => array("checkUnique"),
"message" => "This User already exists.",
"on" => "create"
),
)
У меня есть две проблемы. Первое: Это правило проверки также триггеры на действия обновления, реализованная в виде
public function edit($id = null) {
if (!$this->User->exists($id)) {
throw new NotFoundException(__('Invalid User'));
}
if ($this->request->is(array('post', 'put'))) {
if ($this->User->save($this->request->data)) {
$this->Session->setFlash(__('Update done.'));
return $this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The user can't be saved.'));
}
} else {
$options = array('conditions' => array('User.' . $this->User->primaryKey => $id));
$this->request->data = $this->User->find('first', $options);
}
}
Но я писал "on" => "create"
, так почему это вызывает также на обновление? Вторая проблема: Если правило проверки только срабатывает при создании, как я могу управлять, инициировать ошибку проверки, если кто-то изменяет имя, фамилию и день рождения, как другой пользователь в базе данных? Затем следует запустить уникальное правило проверки.
Спасибо! прекрасно работает! – SPie
Коррекция: $ condition ["User.id <>"] = $ this-> data ["Пользователь"] ["id"]; – MotsManish
Спасибо за ответ, это помогло мне! – TommyDo