Mysql CakePHP难题-在多个关系中保存
好吧,我把自己绑在这里-我需要比我更清晰的头脑来切入问题的中心 我有一个模型Livesession模型,它有许多sessiontrack 有人编辑livesession以及sessiontracks信息,这些信息由用户以相同的形式提交 目前,这可能过于复杂,我正在这样做: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']) &&
$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))
。谢谢!这是一种非常明智和合乎逻辑的方法(而且工作起来很有魅力)。我讨厌当我被某件事情缠住,以至于无法找到一个看似显而易见的解决方案时……:-/