0

さて、私はここで自分自身を結び目で縛っています-問題の中心に切り抜けるには、私よりも明確な頭が必要です!

多くのSessiontracksを持つモデル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テーブルに重複した情報や誤った情報が表示されてしまいます。しかし、私は本当にユーザーが大量のトラック情報を入力して、悪い編集を試みることによってそれを失うリスクを冒したくありません。

おそらく、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 に答える