doctrine 事件

事件介绍

use Doctrine\ORM\Events;

Events::preRemove
Events::postRemove
Events::prePersist
Events::postPersist
Events::preUpdate
Events::postUpdate
Events::postLoad
Events::loadClassMetadata
Events::onClassMetadataNotFound
Events::preFlush
Events::onFlush
Events::postFlush
Events::onClear

事件使用

Symfony中使用

services:
    appbundle.event.doctrine_listener:
        class: AppBundle\EventListener\DoctrineListener
        tags:
          - { name: doctrine.event_subscriber }
namespace AppBundle\EventListener;

use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Events;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Doctrine\ORM\Event\PreUpdateEventArgs;
use Doctrine\ORM\Event\PreFlushEventArgs;
use Doctrine\ORM\Event\PostFlushEventArgs;

class DoctrineListener implements EventSubscriber
{
    public function getSubscribedEvents()
    {
        return array(
            Events::prePersist,
            Events::postPersist,
            Events::preUpdate,
            Events::postUpdate,
            Events::preFlush,
            Events::postFlush,
        );
    }

    public function prePersist(LifecycleEventArgs $args)
    {
        //插入数据库前
    }

    public function postPersist(LifecycleEventArgs $args)
    {
        //插入数据库后
    }

    public function preUpdate(PreUpdateEventArgs $args)
    {
        //修改数据库之前
        $entity = $args->getEntity();
        //判断Entity类型
        if($entity instanceof XxInterface){
            //跟原始数据差异,更改了哪些字段
            //$charged = ['title' => ['old title', 'new title']]
            $changed = $args->getEntityChangeSet();
            //根据修改值,进行其它操作
        }
    }

    public function postUpdate(LifecycleEventArgs $args)
    {
        //修改数据库后
    }

    public function preFlush(PreFlushEventArgs $args)
    {
        //保存数据库之前
        //注:经测试,在 prePersist后/preUpdate前,很诡异
    }

    public function postFlush(PostFlushEventArgs $args)
    {
        //保存数据库后 在 postPersist/postUpdate 后
    }
}

 

转载于:https://my.oschina.net/foreverglory/blog/698505

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值