localdisk

PHP とか Java とか Web とか好きなことを書きます。

Laravel の Model Event


[FuelPHPのORMでinsert前とかをフックして何か処理をする (´・ω・`) - 杏z 学習帳

を見て、Laravel の Model Event を思い出したので書いておきます。

上記みたいに Model をあれやこれやする前後に処理をはさみたい! ということがあると思います。Laravel には Model Event という仕組みが用意されていて楽に書くことができます。

書き方

インサートする前にログを出力したい場合です。

<?php
class Sample extends Eloquent {
    // boot をオーバーライド
    protected static function boot()
    {
        parent::boot();
        // インサート前なので creating メソッドを定義
        self::creating(function($ribbit)
        {
            Log::info('保存するよ');
        });
    }
}

Model Event は、Event クラスの仕組みが使われており、Model 周りはかなり細かくイベントが定義されています。

定義されている Mode Event

creating
インサート前
created
インサート後
updating
アップデート前
updated
アップデート後
saving
インサート前及びアップデート前
saved
インサート後及びアップデート後
deleting
デリート前
deleted
デリート後
restoring
ソフトデリート復帰前
restored
ソフトデリート復帰後

Model Observer

FuelPHP のように Model Observer を作成することもできます。

まず、Observer を用意して…。

<?php
class SampleObserver {
    public function creating($model)
    {
        if (条件) {
            // return false するとインサートは行われません
            return false;
        }
    }
}

Observer を定義します。

<?php
Sample::observe(new SampleObserver);

で OK です。

最後に

4/4 19:30 に Laravel 勉強会が開催されます。

予定が空いてる方はぜひ。