Вот моя функция beforeSave.checkExisting () проверяет, являются ли некоторые поля в $ this-> data уникальными, и возвращает false, если записи не существует, или идентификатор существующей записи, если она существует.Эта функция работает нормально.
public function beforeSave(){
if ($this->checkExisting() !== false){
$this->id = $this->checkExisting();
}
return true;
}
Я думаю, что мой код должен сделать следующее: если существует существующая запись, установите Model-> id для идентификатора этой существующей записи, и, таким образом, форсируйте CakePHPобновлять вместо вставки.
Что этот код на самом деле делает, так это вставлять новую запись.
Если я изменяю $ this-> id = $ this-> checkExisting ();$ this-> data ['Model'] ['id'] = $ this-> checkExisting () ;, MySQL выдает ошибку (дублирующее значение для первичного ключа), поскольку Cake все еще пытается вставить, а не обновить, data.
На каком этапе Cake решает сделать вставку, а не обновление?BeforeSave () слишком поздно, чтобы повлиять на это решение?
Редактировать - вот мой код контроллера:
public function add(){
if (!empty($this->data)){
$saved = 0;
foreach($this->data['Attendance'] as $att){
$this->Attendance->create();
if ($this->Attendance->save(array('Attendance'=>$att))){
$saved++;
}
if ($saved > 0){
$this->Session->setFlash('Data saved successfully','success');
}else{
$this->Session->setFlash('No data was saved. Please make sure you have entered some data.','failure');
}
}
}
}
Подумайте, это как-то связано с тем, что я явно вызываю Attendance?:: создать ()