这篇文章主要是用事件去监控模型的数据更新等。
Eloquent模型方面可以参考Laravel官方文档:http://www.golaravel.com/
一、简要概述:
模型会触发很多事件,每次数据库数据变更都会触发,包括:
creating, created, updating, updated, saving, saved, deleting, deleted, restoring, restored。
新建模型会触发:creating,created。
数据更新:updating,updated,同时也会触发saving,saved。
删除数据:deleting,deleted。
二、举例分析:
1、首先在user.php模型里面定义个$event.
protected $events = [
'saved' => UserSaved::class,
'deleted' => UserDeleted::class,
];
2、注册提供者:
在Laravel中config/app.php 内有个服务提供者类数组 providers,只需要把你的服务添加到数组中即可。
'providers' => [
App\Providers\EventServiceProvider::class,
],
在Lumen中bootstrap/app.php文件中添加注册
$app->register(App\Providers\EventServiceProvider::class);
3、EventServiceProvider.php文件,定义监听和事件
<?php
namespace App\Providers;
use App\Models\User;
use Log;
use Laravel\Lumen\Providers\EventServiceProvider as ServiceProvider;
class EventServiceProvider extends ServiceProvider
{
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
'App\Events\UserSaved' => [
'App\Listeners\UserSavedListener',
],
];
}
4、执行如下命令在app/Events目录下生成UserSaved.php,在app/Listeners目录下生成UserSavedListener.php两个文件,当然也可以手动创建。
php artisan event:generate
5、到这里已经可以用上面UserSavedListener类下面的handle去做一些处理了,比如某些缓存的更新或者删除等。
6、但是如果是对特定实体做处理怎么办呢?好像用上面的还不行,下面是我找到的一种方法。如果只是做下面的操作,上面步骤1-5可以不做。
只需要在EventServiceProvider类中添加下面处理:
//这里是绑定一个模型的saved事件的闭包函数,这里可以对特定的实体数据进行处理,比如改条数据更新后,缓存内只需要更新该条内容,不用更新庞大的用户表。
public function boot()
{
parent::boot();
User::saved(function($user)
{
// doing something here, after User saved...
});
}