PHPのORマッパーであるEloquentでは、データの登録時刻・更新時刻と、データの論理削除(SoftDelete)を行うときの削除時刻を自動で更新してくれる便利な機能があります。
今回は、これらの機能を最小の手間で(=Eloquentのデフォルト設定で)利用するための命名規則を確認します。
Laravelを使っている場合は、マイグレーション機能を使えば規約に沿った形でテーブル定義を行ってくれるのであまり意識しなくて良いですが、Laravel以外のフレームワークを使って、ORマッパーとしてEloquentのパッケージだけを使うときに参考にするとよいです。
Eloquentの日付管理列
結論を先に書くと下記のように定義すればよいです。deleted_at、created_at、updated_at列をtimestamp型で作っておきます。deleted_at列に関してはSoftDelete機能を利用する時のみ定義します。
CREATE TABLE posts (
id int(10) unsigned NOT NULL AUTO_INCREMENT,
deleted_at timestamp NULL DEFAULT NULL,
created_at timestamp NULL DEFAULT NULL,
updated_at timestamp NULL DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
日付管理に関するルール
このテーブルは、下記の使い方を前提にしています。
- テーブルのユニークキーはid列とする。
- データの登録時刻、更新時刻を管理する。
- データは論理削除で管理する(delete文でレコードを消すのではなく、削除フラグを立てる)。
Laravelで上記テーブルを作る時のmigration定義
上記のテーブルを作るためには、Laravelのmigrationだと下記の定義を作ればよいです。up()メソッド内で、softDeletesとtimestampsを指定しています。
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Eloquent\SoftDeletes;
class CreatePostsTable extends Migration
{
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->softDeletes();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('posts');
}
}
こちらもおススメ