Laravel 的模型觀察者(Observer)

程式技術 sharkHead 9個月前 0

Laravel 提供一種模型(Model)觀察者(Observer)的功能,讓你可以在對模型進行新增、修改與刪除時
觸發特定的事件,並額外做出其他處理,有點類似程式中常會提到的鉤子(Hooking)

例如:
當你有一個購物網站,你想要在訂單成功新增之後,自動減少產品的數量
這個時候,我們可以對訂單模型使用觀察者的功能

php artisan make:observer OrderObserver --model=Order

上述指令是新增 Order 模型的觀察者 OrderObserver.php,預設會放在 app/Observers/ 資料夾底下

Laravel 的 Observer 預設提供以下幾個事件點的方法

  • creating:資料即將創建的事件
  • created:資料創建後的事件
  • updating:資料即將更新的事件
  • updated:資料更新後的事件
  • saving:資料即將保存的事件
  • saved:資料保存後的事件
  • deleting:資料即將刪除的事件
  • deleted:資料刪除後的事件
  • restoring:資料即將從軟刪除狀態回復的事件
  • restored:資料從軟刪除狀態回復後的事件

因為是訂單建立後去減少產品的數量,因此應該要使用 created 方法

<?php

namespace App\Observers;

use App\Models\Order;
use App\Models\Product;

class OrderObserver
{
	public function created(Order $order)
	{
		$product = Product::find($order->id);
		if ($product) {
			$product->decrement('quantity')
		}
	}
}

要啟用此模型觀察者,我們需要在 AppServiceProvider.php 的 boot 方法中註冊

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Models\Order;
use App\Observers\OrderObserver;

class AppServiceProvider extends ServiceProvider
{
	public function boot()
	{
		Order::observe(OrderObserver::class);
	}
}

這樣當訂單建立時,就會觸發 OrderObserver 的 created 方法,減少產品的數量


Laravel 與 Python 菜雞工程師
喜愛研究程式相關技術
正在學習 TypeScript 與 Vue.js