BLOG

2015年5月18日/ CakePHP, プラグイン,

[CakePHP 3.x] 検索条件不要でModelの論理削除を実現するプラグイン「SoftDelete」の導入手順

2015年3月にリリースされたCakePHP3.xにようやく慣れてきた佐々木です。

 

いやー、CakePHP便利ですね。
使いこなすまで大変ですが、慣れるととても開発スピードが速くなります。

 

ところで、複数で開発を行っていて感じるのが、やはりスピードを保ったままいかに効率よく安全に開発するか?というところだと思います。

 

そんななか、nanapiさんのブログで良い記事を発見しました。
findせずにconditionsを返す、DRYなCakePHPのModel実装のススメ

 

ユーザーデータ(レコード)などの削除で “deleted” フラグを作って論理的な削除を実装するパターンは多いと思います。
毎度検索条件に “deleted” を実装するのは漏れの観点からもバグの温床になりそうで嫌だったのですが、”検索条件はなるべくモデルのメソッドで生成する” という項目の記事でうまく共通化されていて大変参考になりました。

 

ただ、CakePHP3.0になったわけだし、フレームワークの機能としてModelで論理削除を実装することができる気がしたのでいろいろ調べていたところ、非常に使い勝手の良いプラグインがあったのでご紹介します。
もちろん “CakePHP3.x” 対応です。

 

「CakeSoftDelete plugin for CakePHP」プラグイン

このプラグインは Controller で deleteメソッド を実行した際に、レコードを削除せずフィールドの”deleted”に自動で削除日時を書き込んでくれるプラグインです。
さらにレコードの検索条件にフィールド”deleted”の削除日時の有無をデフォルトでチェックしてくれるので、findの条件にdeletedを意識する必要がなくなります。

 

使い方としては利用したいModelTableにちょちょいと指定するだけで良いので非常にお手軽でした。

 

インストール手順

プラグインのソースコードはGitHubPGBI/cakephp3-soft-delete」に上がっていますが、今回はcomposerを利用します。
手順自体は上記に記載されていますので、そちらも合わせて確認してみてください。

 

composerを実行し、プラグインをインストール

まずcomposer.jsonファイルに以下を追加します。

その後、コマンドでフレームワークにプラグインをインストールしてください。

 

インストールに成功すれば [/vender/pgbi/cakephp3-soft-delete] というフォルダができ、ファイルが生成されているはずです。

 

フレームワークに設定する

“bootstarp.php”にプラグインのロードを追加します。

あとはTableにいくつか宣言を追加します。

 

フィールド”deleted”を追加

利用したいDBテーブルのカラムに”deleted”(DATETIME、初期値NULL)を追加します。
NULL or 日時のデータで削除を有無をチェックしているので必ず初期値でNULLを設定しましょう。

これでUsersテーブルは論理削除が自動で行われるようになりました。

 

レコードを物理的に削除したい場合は?

もちろんレコード自体を削除することも可能です。

詳細はGitHubをチェックしてみてください!
PGBI/cakephp3-soft-delete

 

おわりに

CakePHPは開発者が多く、情報量・プラグインともに豊富なことから人気のフレームワークです。
他にもTwitterBootstrapのプラグインなんかもありますので、参考にしてみてください。

[CakePHP 3.x] TwitterBootstrapプラグインのインストール方法

 

Resent Posts

Category