菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
1714
2

Laravel 中的模型事件与 Observer

原创
05/13 14:22
阅读数 2257

模型事件

在 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 中观测到各种事件啦~

发表评论

0/200
1714 点赞
2 评论
收藏
为你推荐 换一批