本章の内容
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;
}