公開日: 2023年01月15日

Eloquentモデルがイベントを発行した際に特定の処理を実行する

こういう機能があるんだ~という備忘録です。

目次

概要

EloquentモデルにはEloquentモデルがイベントを発行する際、特定のイベント時に処理を追加することができる機能があるようです。

Eloquent: Getting Started - Laravel 11.x - The PHP Framework For Web Artisans

Laravel is a PHP web application framework with expressive, elegant syntax. We’ve already laid the foundation — freeing you to create without sweating the small things.
https://laravel.com/docs/11.x/eloquent#events-using-closures

処理を追加できるイベントは以下の通りです。

使い方

Observers(オブサーバー)を使わない方法

app/Models/User.php
<?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){
// 追加の処理をここに定義する
});
}
}

Observers(オブサーバー)を使う方法

オブサーバークラスを作成します。

Terminal window
php artisan make:observer UserObserver --model=User
app/Observers/UserObserver.php
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モデルに設定し、オブサーバーの配置を行います。

app/Models/User.php
use App\Observers\UserObserver;
use Illuminate\Database\Eloquent\Attributes\ObservedBy;
use Illuminate\Database\Eloquent\Model;
#[ObservedBy([UserObserver::class])]
class User extends Model
{
// ...
}

ObservedBy属性を使用しない場合は、bootメソッドで手動登録することができます。

app/Models/User.php
/**
* Bootstrap any application services.
*/
public function boot(): void
{
User::observe(UserObserver::class);
}

Eloquent: Getting Started - Laravel 11.x - The PHP Framework For Web Artisans

Laravel is a PHP web application framework with expressive, elegant syntax. We’ve already laid the foundation — freeing you to create without sweating the small things.
https://laravel.com/docs/11.x/eloquent#observers
© 2024 blog.tksn.jp. All Rights Reserved.