CakePHP(v3.x)、ユーザを論理削除に対応させる。

DB上にユーザというレコードを作っておき、AuditLogなどでサービス上のユーザの挙動を監視するなどの実装をしているときに、ユーザをIDで紐付けて実装している場合にはユーザを消してしまうと監査ログがエラーまみれになってしまいます。

そういうときは、DB上からデータを削除してしまうのではなく、deletedといったステータスを変更することでソフトウェア上で削除したような挙動をさせ、監査ログからはユーザ削除後もリレーションを組んだ状態で追えるようにするといいかと思います。

有効なプラグインはこちらです。

cakephp3-soft-delete

READMEのとおりですが、以下の手順で導入すると良いです。(今回はUsersというテーブルに導入します。)

プラグインのインストール

composerでインストールします。ターミナルで以下を実行するだけです。

$ composer require pgbi/cakephp3-soft-delete "~1.0"

コンフィグレージョン

READMEにはbootstram.php下に

Plugin::load('SoftDelete');

するようにと書いてありますが、これだと怒られてしまうので、 src/Application.phpファイルにプラグインのロードに関して追記していきます。

// ー略ー
    public function bootstrap()
    {
        $this->addPlugin('SoftDelete'); // 追加
// ー略ー

論理削除を導入したいテーブルの編集。

src/Model/Table/UsersTable.phpに以下を追記します。

// ー略ー
use SoftDelete\Model\Table\SoftDeleteTrait;

class UsersTable extends Table
{
    use SoftDeleteTrait;
// ー略ー

以上です。後はテストデータなどで削除してみながら確認してみてください。