Хорошо, я связываю себя здесь узлами - мне нужны более ясные головы, чем моя, чтобы разобраться в самой сути проблемы!
У меня есть модель Livesession, в которой есть много треков сессий.
Кто-то редактирует живую сессию вместе с информацией о сессиях, которая отправляется пользователем в той же форме.
В настоящий момент, и это может быть слишком сложно, я делаю следующее:
$temp = array();
foreach ($this->data['Sessiontracks'] as $track) {
if (!empty($track['name']) && !empty($track['starts_at'])) {
$temp[] = $track;
}
}
$this->data['Sessiontracks'] = $temp;
$this->Livesession->Sessiontracks->deleteAll(
array('livesession_id'=>$this->data['Livesession']['id'])
);
if ($fileok && this->Livesession->saveAll($this->data)) {
// success!
} else { // failure! }
Насколько это возможно, это прекрасно работает для захвата информации о сессионных треках из формы и замены старой информации о сессионных треках новой информацией каждый раз, когда форма редактируется. Если сохранение прошло успешно. Если сохранение не удается, например, если редактор пытается очистить обязательное поле, то вся информация их сеансовых треков удаляется из базы данных и ничем не заменяется.
Я не могу удалить информацию о сессионных треках после того, как сохраню ее; и если я не удаляю его вообще, я получаю дублирующуюся и / или ошибочную информацию в таблице сессионных треков. Но я действительно не хочу, чтобы пользователь вводил огромное количество информации о треках и рисковал потерять ее при попытке неправильного редактирования.
Возможно, я мог бы сохранить старую информацию о сеансах и сохранить ее обратно в таблицу после deleteAll, если saveAll не удастся? Тем не менее, я определенно чувствую, что, вероятно, выбрал совершенно неправильный путь, и не хочу копаться глубже.
Как лучше всего сохранить данные, связанные с Livesession, даже в случае сбоя сохранения?