0

好吧,我在这里把自己绑起来——我需要比我更清晰的头脑才能切入问题的中心!

我有一个模型 Livesession 模型,它有许多 Sessiontracks。

有人编辑 livesession 以及 sessiontracks 信息,这些信息由用户以相同的形式提交。

目前,到目前为止,这可能过于复杂,我正在这样做:

$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 信息,并在每次编辑表单时用新信息替换旧的 sessiontracks 信息。 如果保存成功。如果保存失败,例如,如果编辑器试图空白一个必填字段,那么他们所有的 sessiontracks 信息都会从数据库中删除,并且不会被任何东西替换。

保存后无法删除 sessiontracks 信息;如果我根本不删除它,我最终会在 sessiontracks 表中得到重复和/或错误的信息。但我真的不希望用户输入大量曲目信息,并冒着因尝试错误编辑而丢失信息的风险。

如果 saveAll 失败,也许我可以保留旧的 sessiontracks 信息并在 deleteAll 之后将其保存回表中?不过,我肯定感觉到,我可能已经完全走错了路,并且不想更深入地挖掘自己。

即使在保存失败的情况下,确保我保留 Livesession 的相关数据的最佳方法是什么?

4

1 回答 1

0

$ids = find('list',array('conditions'=>array(..)))在你 saveAll 之前,然后deleteAll(array('conditions'=>array('Model.id'=>$ids)))在保存成功之后。

于 2011-08-02T17:57:26.873 回答