Хорошо, я здесь завязываю себя узлами - мне нужны более четкие головы, чем моя, чтобы пробиться к центру проблемы!
У меня есть модель модели Livesession, у которой есть много Sessiontracks.
Кто-то редактирует 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связанные данные, даже в случае сбоя сохранения?