こういう機能があるんだ~という備忘録です。
EloquentモデルにはEloquentモデルがイベントを発行する際、特定のイベント時に処理を追加することができる機能があるようです。
処理を追加できるイベントは以下の通りです。
retrieved
creating
created
updating
updated
saving
saved
deleting
deleted
restoring
restored
replicating
<?php
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
class User extends Model{ /** * Perform any actions required after the model boots. * * @return void */ protected static function booted() { /** * モデルの新規作成時に実行する処理 */ static::createing(function (User $user){ // 追加の処理をここに定義する });
/** * モデルの更新時に実行する処理 */ static::updating(function (User $user){ // 追加の処理をここに定義する }); }}
オブサーバークラスを作成します。
php artisan make:observer UserObserver --model=User
namespace App\Observers;
use App\Models\User;
class UserObserver{ /** * Handle the User "created" event. */ public function created(User $user): void { // 追加の処理をここに定義する }
/** * Handle the User "updated" event. */ public function updated(User $user): void { // 追加の処理をここに定義する }
/** * Handle the User "deleted" event. */ public function deleted(User $user): void { // 追加の処理をここに定義する }
/** * Handle the User "restored" event. */ public function restored(User $user): void { // 追加の処理をここに定義する }
/** * Handle the User "force deleted" event. */ public function forceDeleted(User $user): void { // 追加の処理をここに定義する }}
ObservedBy
属性をUser
モデルに設定し、オブサーバーの配置を行います。
use App\Observers\UserObserver;use Illuminate\Database\Eloquent\Attributes\ObservedBy;use Illuminate\Database\Eloquent\Model;
#[ObservedBy([UserObserver::class])]class User extends Model{ // ...}
ObservedBy
属性を使用しない場合は、boot
メソッドで手動登録することができます。
/** * Bootstrap any application services. */public function boot(): void{ User::observe(UserObserver::class);}