Laravel 中的模型事件与 Observer
“
模型事件在Laravel的世界中,你对Eloquent大多数操作都会或多或少的触发一些模型事件,今天就来看一下模型事件的使用。Laravel事先已经定义好了10个模型事件以供我们使用,它们分别是:creating,created,u
”
模型事件
在 Laravel 的世界中,你对 Eloquent 大多数操作都会或多或少的触发一些模型事件,今天就来看一下模型事件的使用。 Laravel 事先已经定义好了 10 个模型事件以供我们使用,它们分别是:
creating, created , updating, updated, saving, saved, deleting, deleted, restoring, restored。
事件名称都很浅显易懂。
总结
当模型已存在,不是新建的时候,依次触发的顺序是:
saving -> updating -> updated -> saved
当模型不存在,需要新增的时候,依次触发的顺序则是
saving -> creating -> created -> saved
Observer (观察者)
如果你想在一个模型中监听多个事件,那么你可以把它写成一个类,类中的方法名称即是你想要监听的事件名称
class UserObserver
{
/**
* 监听数据即将创建的事件。
*
* @param User $user
* @return void
*/
public function creating(User $user)
{
}
/**
* 监听数据创建后的事件。
*
* @param User $user
* @return void
*/
public function created(User $user)
{
}
/**
* 监听数据即将更新的事件。
*
* @param User $user
* @return void
*/
public function updating(User $user)
{
}
/**
* 监听数据更新后的事件。
*
* @param User $user
* @return void
*/
public function updated(User $user)
{
}
/**
* 监听数据即将保存的事件。
*
* @param User $user
* @return void
*/
public function saving(User $user)
{
}
/**
* 监听数据保存后的事件。
*
* @param User $user
* @return void
*/
public function saved(User $user)
{
}
/**
* 监听数据即将删除的事件。
*
* @param User $user
* @return void
*/
public function deleting(User $user)
{
}
/**
* 监听数据删除后的事件。
*
* @param User $user
* @return void
*/
public function deleted(User $user)
{
}
/**
* 监听数据即将从软删除状态恢复的事件。
*
* @param User $user
* @return void
*/
public function restoring(User $user)
{
}
/**
* 监听数据从软删除状态恢复后的事件。
*
* @param User $user
* @return void
*/
public function restored(User $user)
{
}
}
然后在 AppServiceProvider
中注册此观察者
<?php
namespace App\Providers;
use App\User;
use App\Observers\UserObserver;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* 运行所有应用.
*
* @return void
*/
public function boot()
{
// 为 User 模型注册观察者
User::observe(UserObserver::class);
}
/**
* 注册服务提供.
*
* @return void
*/
public function register()
{
//
}
}
然后你就可以在你注册的 Observer
中观测到各种事件啦~
模型中定义
在模型 $dispatchesEvents 中定义
<?php
namespace App\Models;
use App\Events\Publiclished;
use Illuminate\Database\Eloquent\Model;
class BaseModel extends Model
{
protected $dispatchesEvents = [
'created' => Publiclished::class,
'updated' => Publiclished::class,
'deleted' => Publiclished::class,
];
}
36