Mysql CakePHP难题-在多个关系中保存

Mysql CakePHP难题-在多个关系中保存,mysql,cakephp,has-and-belongs-to-many,relationships,saving-data,Mysql,Cakephp,Has And Belongs To Many,Relationships,Saving Data,好吧,我把自己绑在这里-我需要比我更清晰的头脑来切入问题的中心 我有一个模型Livesession模型,它有许多sessiontrack 有人编辑livesession以及sessiontracks信息,这些信息由用户以相同的形式提交 目前,这可能过于复杂,我正在这样做: $temp = array(); foreach ($this->data['Sessiontracks'] as $track) { if (!empty($track['name']) &&

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

我有一个模型Livesession模型,它有许多sessiontrack

有人编辑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关联数据的最佳方法是什么?

在保存所有数据之前,只需
$ids=find('list',array('conditions'=>array(…)
),然后在保存成功后
删除所有数据('array('conditions'=>array('Model.id'=>$ids))

谢谢!这是一种非常明智和合乎逻辑的方法(而且工作起来很有魅力)。我讨厌当我被某件事情缠住,以至于无法找到一个看似显而易见的解决方案时……:-/