LoginSignup
0
0

More than 3 years have passed since last update.

CakePHP ブログチュートリアル 論理削除を実装

Posted at

本章の内容

CakePHPブログチュートリアルの削除機能を論理削除にする。

物理削除と論理削除

  • 物理削除 : ハードディスクなどの記憶媒体から当該行のデータを削除すること
  • 物理削除 : 当該行が削除されたことをデータとして表現することで削除されたものとみなすこと (=データは記憶媒体に残ったまま)

テーブルに、論理削除フラグを示すカラムを追加して、論理削除を実装する。
(0なら未削除、1なら削除みたいに)

論理削除の嬉しいこと

  • ユーザーからその存在を隠蔽したいが、データとしては残しておきたい (例えば、業務事情により当該データを使用禁止にしたいが、一時的なのですぐに元に戻せるようにしたい場合)
  • 誤って削除した場合に備え、すぐにデータを復元できるようにしておきたい

調べたこと

論理削除の実装

1.SoftDeleteBehavior.php <-これを、app/Model/Behavior/下に保存。

2.テーブルに、論理削除フラグ用のカラムを追加

削除フラグ

カラム名 : deleted
型 : tinyint(3)
デフォルト値 : 0

削除日

カラム名 : deleted_date
型 : datetime

3.論理削除を行うモデルに以下を追加

public $actsAs = ['SoftDelete'];

4.AppModel.phpに以下を追加。delete関数をsoftdeleteに再定義?

public function exists($id = null) {
    if ($this->Behaviors->loaded('SoftDelete')) {
    return $this->existsAndNotDeleted($id);
    } else {
    return parent::exists($id);
    }
}

public function delete($id = null, $cascade = true) {
    $result = parent::delete($id, $cascade);
    if ($result === false && $this->Behaviors->enabled('SoftDelete')) {
        return (bool)$this->field('deleted', array('deleted' => 1));
    }
    return $result;
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0