0

私はここで結びついています - 私は問題の中心に切り開くために私よりも明確な頭が必要です!CakePHP Conundrum - HasMany関係での保存

私は多くのセッショントラックを持つモデルのライフセッションモデルを持っています。

誰かが、同じフォームでユーザーから送信されたセッショントラック情報とともに、ライフセッションを編集します。これは、それがフォームから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テーブルに重複した情報や誤った情報を残します。しかし、私は本当にユーザーが大量のトラック情報を入力し、悪い編集を試みることによってそれを失う危険を冒すことを望まない。

おそらく私は古いセッショントラック情報を保持し、saveAllが失敗した場合にdeleteAllの後にテーブルに保存することができますか?しかし、私はおそらくこれで間違ったルートを完全に崩してしまったのではないかと思っています。

保存に失敗した場合でも、私がLivesessionの関連データを確実に保持するための最良の方法は何ですか?

答えて

0

ただちに$ids = find('list',array('conditions'=>array(..)))を保存する前に、次に保存が成功した後にはdeleteAll(array('conditions'=>array('Model.id'=>$ids)))となります。

+0

ああ、ありがとう!それは深く賢明で論理的なアプローチです(そして、魅力のように働く)。私は一見明白な解決策に切り落とされない何かにこんなに包まれたときに嫌い...: - / – thesunneversets