Laravel Eloquent 模型事件

这篇文章主要是用事件去监控模型的数据更新等。
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...
        });
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值