CakePHP难题 - 拯救HasMany关系

时间:2011-08-02 16:11:34

标签: mysql cakephp has-and-belongs-to-many relationships saving-data

好吧,我在这里打结自己 - 我需要比我更清晰的头脑切入问题的中心!

我有一个模型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相关数据的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

在保存所有内容之前,只需$ids = find('list',array('conditions'=>array(..))),然后在保存成功后再deleteAll(array('conditions'=>array('Model.id'=>$ids)))

相关问题