0

好吧,我在這裏打結 - 我需要比我更清晰的頭部來切入問題的中心!CakePHP難題 - 保存在一個HasMany關係中

我有一個模型Livesession模型,它有許多會話軌跡。

有人編輯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信息,並每次編輯表格時都會用新信息替換舊的會話信息。 如果保存成功。如果保存失敗,例如,如果編輯器試圖刪除一個必填字段,那麼他們所有的會話軌跡信息都會從數據庫中刪除,而不會被任何內容替換。

保存後我無法刪除sessiontracks信息;如果我完全不刪除它,最終會在sessiontracks表中顯示重複和/或錯誤的信息。但我真的不希望用戶輸入大量的曲目信息,並且冒着嘗試編輯錯誤的風險。

也許我可以保留舊的sessiontracks信息,並在deleteAll後將其保存回表中,如果saveAll失敗?不過,我絕對有這種感覺,我可能已經完全錯誤地走下了這條路,並且不想深入挖掘自己。

即使在發生保存失敗的情況下,確保保留Livesession關聯數據的最佳方式是什麼?

回答

0

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

+0

啊哈,謝謝!這是一個非常合理和合乎邏輯的方法(並且像魅力一樣起作用)。我討厭什麼時候把自己無法切入的東西包裝進了一個看似明顯的解決方案中......:/ – thesunneversets