もふもふ技術部

CakePHPのModelの動きを論理削除にしてみる


概要

SoftDeleteBehaviorを使って論理削除にしてみる。

PHP5.4、CakePHP2.2.5を利用。

SoftDeleteBehaviorの導入

まず、CakeDCのutilsに置いてあるソースを取ってくる。(MITライセンス)

https://github.com/CakeDC/utils/blob/master/Model/Behavior/SoftDeleteBehavior.php

取ってきたら、app/Model/Behaviorの下に置く。

うちの環境だと何かとエラーが出たので以下の行をさらっと修正。

これで動いた。

テーブルの用意

SoftDeleteBehavior.phpのソースを見ると、削除フラグとかを立てるデフォルトのカラム名として、deletedとdeleted_dateが指定されている。ということで試しに下記のようなユーザ情報を登録するテーブルを作ってみる。MySQL利用。

削除フラグ(deleted)はtinyint(1)で登録すると良いらしい。デフォルト値で0が入るようにしておく。新規登録時とかに勝手に0を入れてくれたりはしないようで、DEFAULT NULLにしておくとdeletedの値がNULLになって検索にヒットしなくなってしまった。

Modelの用意

最後にModelにSoftDeleteBehaviorを使うことを明記する。

これで普通にModelでdeleteを走らせると、物理削除されずに論理削除(deleted=1)されるようになった。検索した場合はdeleted=0が条件に入るので、削除されたレコードはヒットしなくなる。

ただ、Modelに対してexistsした時はIDのみで検索にいくようで、結果がtrueになる。これを避けたいのであればexistsをオーバーライドしてしまえば良いだろうか。

The following two tabs change content below.
masato watanabe

masato watanabe

もふもふ部ブレーン。プログラマ兼ライター。