cakephp2でテーブルを論理削除する場合、開発者任せにしておくと、人によってdelete_flagであったり、delet_flgであったり、is_deletedであったり、カラム名が統一されなかったり、findの度に削除フラグを検索対象に含まなければならなかったりします。
特にfindの場合、検索対象に論理削除フラグを入れ忘れていて新たなバグを生み出す可能性もあります。
人によってバラバラや、人が気をつけなければならないといった状態はよくないので、cakephpで用意されているSoftDeleteBehaviorを使います。
以下よりSoftDeleteBehavior.phpをダウンロードして、Model/Behavior配下に置きます。
Model/Behavior/SoftDeleteBehavior.php
あとは、使いたいモデルで以下よのうに呼び出します。
class Cart extends AppModel { // 論理削除用ビヘイビア $actAs = ['SoftDeleteBehavior'];論理削除にしたいテーブルで以下のようなカラムを追加します。
・削除フラグ
deleted tinyint(1) デフォルト:0・削除日時
deleted_date datetimeAppModelには以下記述しておきます。
class AppModel extends Model { public function exists($id = null) { if ($this->Behaviors->attached('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; } }