駆け出しエンジニアの勉強記録

アラフォー女の未経験すぎる業界での勉強記録

laravelのObserver(オブザーバー)

参考:Laravel Observerを使ってみた

Laravel Observer(オブザーバー)
モデル観察システムで、モデルの状態変化(作成、更新、削除など)を監視し、それに対して特定のアクションを実行する機能を作成できる。

①コマンドでファイル作成
php artisan make:observer UserObserver[←ファイル名] --model=User[←モデル名]

②該当メソッドにコードを書く

public function created(Account $account): void  // モデルファイルが作成された時
public function updated(Account $account): void  // モデルファイルが更新された時
public function deleted(Account $account): void // モデルファイルが削除された時
public function restored(Account $account): void  // Soft Delete(論理削除)されたモデルが復元されたとき
public function forceDeleted(Account $account): void  // Soft Delete(論理削除)されたモデルが完全に永久的に削除されたとき

(例)Accountモデルファイルができたら、MHIAテーブルのデータをHIAテーブルにコピー

public function created(Account $account): void
{
$latestAccount = Account::latest()->first();

// 重複コピーを避けるため、HIAテーブルに自分のaccount_idがあるか確認
// $existingData = HealthInsuranceAssociation::where('account_id', auth()->user()->account_id)->get();
$existingData = HealthInsuranceAssociation::where('account_id', $latestAccount->id)->get();
// account_idがなかったらマスターデータを取得してHIAテーブルに登録
if($existingData->isEmpty()){
$master_hia_table = MasterHealthInsuranceAssociation::all();

foreach($master_hia_table as $data){
$hia_tables = new HealthInsuranceAssociation();
// $hia_tables->account_id = auth()->user()->account_id;
$hia_tables->account_id = $latestAccount->id;
$hia_tables->code = $data->code;
$hia_tables->name = $data->name;
$hia_tables->save();
}
}
}


③app/Providers/EventServiceProviderのbootに登録

/**
* Register any events for your application.
*/
public function boot(): void
{
Account::observe(AccountObserver::class);
}