2

CakeDC の utils パッケージの Soft Delete - Behavior を使用しています。
( https://github.com/CakeDC/utils )

問題は次のとおりです。次のように、何かがソフト(削除)されているかどうかをコントローラーで確認したい:

<?php
  if ($this->User->delete($id)) {
    $this->Session->setFlash(__('user has been deleted'));
  } else {
    $this->Session->setFlash(__('user has not been deleted'));
  }
 ?>

残念ながら、私は結果を間違っています。ユーザーが(ソフト)削除された場合、「ユーザーは削除されていません」というメッセージが表示され、その逆も同様です。

私は Cake がこのリクエストを処理する方法を知っており、beforeDelete フックは false を返して、データの (ハード) 削除を停止する必要があります。しかし、github でこの問題を参照すると、これは今では修正されているはずです。これが機能しないのは私だけですか?

単に条件を否定する以外に、この問題の回避策はありますか? (それはしたくない、それは正しくない)

よろしくお願いします!
ナーリ

4

1 に答える 1

0

これに使用するソリューションは、@mark がリンクしているスレッドから半分コピーされ、半分書かれています。

これをあなたのAppModel

/**
 * Override the delete() model method so that we can account for the
 * SoftDelete behaviours return
 *
 * @param int $id
 * @param bool $cascade
 * @return bool
 */
    public function delete($id = null, $cascade = true) {
        $result = parent::delete($id, $cascade);
        if ($result === false && $this->Behaviors->enabled('SoftDelete')) {
            return $this->field('deleted', array('deleted' => 1));
        }
        return $result;
    }

このスニペットでは、動作default設定が使用されていることに注意してください。これが、フィールドに別の名前を付けた場合に使用する理由'deleted' => 1です。これを変更する必要があります。

于 2013-05-02T08:16:27.363 に答える