Laravel5.8
  1. 安装配置及核心内容
  2. 框架基础
  3. 进阶知识
  4. 数据库相关
    1. Laravel - 数据库相关 - 简介与配置
    2. Laravel - 数据库相关 - 原生 SQL 操作
    3. Laravel - 数据库相关 - 查询构造器
    4. Laravel - 数据库相关 - 分页
    5. Laravel - 数据库相关 - 数据迁移
    6. Laravel - 数据库相关 - 数据填充
    7. Laravel - 数据库相关 - redis
    8. Laravel - Eloquent 模型 - 入门
    9. Laravel - Eloquent 模型 - 查询作用域(全局,本地,动态)
    10. Laravel - Eloquent 模型 - 事件与监听方法
    11. Laravel - Eloquent 模型 - 关联关系
    12. Laravel - Eloquent 模型 - 关联查询
    13. Laravel - Eloquent 模型 - 访问器和修改器

Laravel - Eloquent 模型 - 事件与监听方法

程序员日记      2019-09-09

Eloquent可触发的事件

retrieved - 从数据库中获取已存在模型时触发

creating - 新模型被首次保存的时候触发

created - 新模型被首次保存的时候触发

updating - 已存在的模型保存的时候触发

updated - 已存在的模型保存的饿时候触发

saving - 无论创建或更新都会触发

saved - 无论创建或更新都会触发

deleting - 删除模型的时候触发

deleted - 删除模型的时候触发

restoring - 恢复软删除数据的时候触发

restored - 恢复软删除数据的时候触发


使用事件监听器监听事件

1.在 app/Providers/EventServiceProvider.php 中注册事件

protected $listen = [
    'App\Events\UserSaved' => [
        'App\Listeners\UserSavedListener',
    ],
    'App\Events\UserDeleted' => [
        'App\Listeners\UserDeletedListener',
    ],
];


2.生成事件类与监听器类

php artisan event:generate

php artisan make:event UserSaved
php artisan make:listener UserSavedListener
php artisan make:event UserDeleted
php artisan make:listener UserDeletedListener


3.映射模型生命周期中多个时间点与对应事件类

<?php
namespace App;
use App\Events\UserSaved;
use App\Events\UserDeleted;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
    use Notifiable;
    protected $dispatchesEvents = [
        'saved' => UserSaved::class,
        'deleted' => UserDeleted::class,
    ];
}

说明

saved生命周期,映射UserSaved::class事件类,

deleted生命周期,映射UserDeleted::class事件类,


4.编写监听器中的操作。


使用观察者监听事件

1.创建观察者类

php artisan make:observer UserObserver --model=User

说明

UserObserver:你的观察者类名

--model=User:指定关联模型


2.在观察者类中编辑触发事件

<?php
namespace App\Observers;
use App\User;
class UserObserver
{
    public function created(User $user)
    {
        //
    }
   
    public function updated(User $user)
    {
        //
    }
    
    public function deleted(User $user)
    {
        //
    }
   
    public function restored(User $user)
    {
        //
    }
   
    public function forceDeleted(User $user)
    {
        //
    }
}


3.在服务提供者中注册观察者,比如我们可以在 AppServiceProvider 的boot方法中注册

<?php
namespace App\Providers;
use App\User;
use App\Observers\UserObserver;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
    
    public function boot()
    {
        User::observe(UserObserver::class);
    }
    public function register()
    {
        //
    }
}