CakePHP Conundrum - Экономия в отношениях HasMany - PullRequest
0 голосов
/ 02 августа 2011

Хорошо, я здесь завязываю себя узлами - мне нужны более четкие головы, чем моя, чтобы пробиться к центру проблемы!

У меня есть модель модели 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связанные данные, даже в случае сбоя сохранения?

1 Ответ

0 голосов
/ 02 августа 2011

просто $ids = find('list',array('conditions'=>array(..))) перед сохранениемВсе, затем deleteAll(array('conditions'=>array('Model.id'=>$ids))) после успешного сохранения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...