好吧,我在这里打结自己 - 我需要比我更清晰的头脑切入问题的中心!
我有一个模型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! }
就目前而言,从表单中获取会话跟踪信息,并在每次编辑表单时用新信息替换旧的会话跟踪信息,这样做效果很好。 如果,保存成功。如果保存失败,例如,如果编辑器尝试将必填字段空白,则所有会话跟踪信息都将从数据库中删除,而不会被任何内容替换。
我保存后无法删除会话跟踪信息;如果我根本不删除它,我最终会在sessiontracks表中找到重复和/或错误的信息。但我真的不希望用户输入大量的跟踪信息,并冒着尝试编辑错误而失去风险的风险。
如果saveAll失败,也许我可以保留旧的会话跟踪信息并在deleteAll之后将其保存回表中?不过,我肯定觉得我可能完全走错了路,并且不想深入挖掘自己。
即使在发生保存失败的情况下,确保保留Livesession相关数据的最佳方法是什么?
答案 0 :(得分:0)
$ids = find('list',array('conditions'=>array(..)))
,然后在保存成功后再deleteAll(array('conditions'=>array('Model.id'=>$ids)))
。