All Articles

Laravel Eloquentの新規作成時に共通処理を追加する

イベントフック

Eloquentにはいくつかのイベントに対して処理を紐付けることが出来ます。新規作成時にはcreatingイベントが実行されるので、creatingイベント実行時に処理を設定することで新規作成時に必ず設定した処理が行われるようにすることが出来ます。

サンプルコード

投稿した記事に対してUUIDを設定するという処理を紐付けるサンプルを書いてみます。

ここで記事に対応するEloquentをPostとします。また、UUIDを生成するuuid()というヘルパーメソッドを作成済みとします。

<?php

use Illuminate\\Database\\Eloquent\\Model;

/**
 * @property string $id
 * @property string $title
 * @property string $subject
 * @property \\Illuminate\\Support\\Carbon|null $created_at
 * @property \\Illuminate\\Support\\Carbon|null $updated_at
 */
class Post extends Model
{
    public $incrementing = false;
    protected $keyType = 'string';
    protected $fillable = ['title', 'subject'];

    protected static function boot()
    {
        parent::boot();

        static::creating(function (Post $post) {
            $post->id = uuid();
        });
    }
}

Eloquentのクラスにboot()メソッドをオーバーライドして、static::creatingcreatingイベントに対して処理を紐付けることで新規作成時に共通で設定した処理が実行されるようになります。

参考