mysql 事件_swoft2 教程系列-mysql事件

当使用模型操作的时候会触发一些事件,我们可以根据不同的事件进行数据的处理。比如想要实时更新数据到 ElasticSearch 可以监听 swoft.model.saved 事件进行添加,监听 swoft.model.updated 更新,又或者要实时更新缓存,也可以使用这个办法。

公共的事件名列表, 可以在SwoftDbDbEvent 类中参看所有事件

5b4adc692b048bc767c2980d015ca6d6.png
如果是正在进行时(ing) 在监听事件中是调用了 $event->stopPropagation(true); 后续操作会终止直接返回结果. 对过去式停止无效

创建模型事件监听器

创建模型使劲监听器跟创建其他事件监听器一样,都是放在 app/Listener 目录,也是实现 EventHandlerInterface 接口。

单模型单动作监听

<?php declare(strict_types=1);
namespace AppListener;
use AppModelEntityUser;
use SwoftEventAnnotationMappingListener;
use SwoftEventEventHandlerInterface;
use SwoftEventEventInterface;
/**
 * Class UserSavingListener
 *
 * @since 2.0
 *
 * @Listener("swoft.model.user.saving")
 */
class UserSavingListener implements EventHandlerInterface
{
    /**
     * @param EventInterface $event
     */
    public function handle(EventInterface $event): void
    {
        /* @var User $user */
        $user = $event->getTarget();
        if ($user->getAge() > 100) {
            // stopping saving
            $event->stopPropagation(true);
            $user->setAdd(100);
        }
    }
}

$event->getTarget()我们在学习事件的时候有学过这个,就是发送事件的时候传递的第二个参数

多模型单动作监听

<?php declare(strict_types=1);
namespace AppListener;
use AppModelEntityUser;
use SwoftDbDbEvent;
use SwoftDbEloquentModel;
use SwoftEventAnnotationMappingListener;
use SwoftEventEventHandlerInterface;
use SwoftEventEventInterface;
/**
 * Class RanListener
 *
 * @since 2.0
 *
 * @Listener(DbEvent::MODEL_SAVED)
 */
class ModelSavedListener implements EventHandlerInterface
{
    /**
     * @param EventInterface $event
     */
    public function handle(EventInterface $event): void
    {
        /* @var Model $modelStatic */
        $modelStatic = $event->getTarget();
        if ($modelStatic instanceof User) {
            // to do something....
        }
        // ....
    }
}

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要

PHP进阶架构师>>>视频、面试文档免费获取​shimo.im
9b70261cc8c74527716c4b199c7287ef.png

或 者关注咱们下面的知乎专栏

PHP架构师圈子​zhuanlan.zhihu.com
05bcb13b0b838415e53f04a41585ff71.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值