当前位置: 首页 > 工具软件 > Doctrine > 使用案例 >

doctrine 事件

宰父衡
2023-12-01

事件介绍

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

 类似资料: