沃梦达 / 编程问答 / php问题 / 正文

Symfony 5(包括4)使用Gedmo Doctrine扩展进行SoftDelete

Symfony 5 (Including 4) using Gedmo Doctrine Extension for SoftDelete(Symfony 5(包括4)使用Gedmo Doctrine扩展进行SoftDelete)

本文介绍了Symfony 5(包括4)使用Gedmo Doctrine扩展进行SoftDelete的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我曾尝试对symfony 5中的一些实体使用软删除(使用gedmo/学说扩展),但遇到了一些问题:

侦听器";SoftDeleteableListener";未添加到EventManager!

编译错误:AppEntityAdmin和GedmoSoftDeleteableTraitsSoftDeleteableEntity在AppEntityAdmin的组合中定义相同的属性($DeletedAt)。然而,定义不同,被认为是不相容的。类已编写

这就是我试过的,它运行得很好

  1. 安装Gedmo/学说-扩展

     composer require gedmo/doctrine-extensions
    
  2. 将列DELETED_AT添加到表中您要使用的软删除(使用迁移或手动添加)

  3. 将CONFIG添加到CONFIG/Packages/Posiine.yaml

     filters:
    
         softdeleteable:
    
         class: GedmoSoftDeleteableFilterSoftDeleteableFilter
    
         enabled: true
    
  4. 将配置添加到config/services.yaml

     gedmo.listener.softdeleteable:
         class: GedmoSoftDeleteableSoftDeleteableListener
         tags:
             - { name: doctrine.event_subscriber, connection: default }
         calls:
             - [ setAnnotationReader, [ '@annotation_reader' ] ]
    
  5. 将Gedmo添加到您的实体并使用SoftDeleteableEntity

     <?php
    
     namespace AppEntity;
    
     use GedmoSoftDeleteableTraitsSoftDeleteableEntity;
    
      /**
      * @ORMEntity(repositoryClass=AdminRepository::class)
      * @ORMTable(name="admins")
      * @GedmoSoftDeleteable(fieldName="deletedAt", timeAware=false, 
      hardDelete=false)
     */
     class Admin implements UserInterface
     {
         use SoftDeleteableEntity;
         ….
     }
    
  6. 最后,照常使用删除功能,将更新DELETED_AT列

     /**
      * @param Admin $admin
      */
      public function delete(Admin $admin)
     {
         $this->_em->remove($admin);
         $this->_em->flush();
     }
    

注意: 不需要将deletedAt字段、getDeletedAtsetDeletedAt添加到您的实体

推荐答案

如果使用php格式(配置/服务.php)而不是yaml,请将步骤4更改为以下内容。

$services->set("gedmo.listener.softdeleteable")
->class(GedmoSoftDeleteableSoftDeleteableListener::class)
->tag(name: 'doctrine.event_subscriber', attributes: ["method" => "setAnnotationReader", "connection" => "default"])
->args([service('doctrine.orm.metadata.annotation_reader')])
;

这篇关于Symfony 5(包括4)使用Gedmo Doctrine扩展进行SoftDelete的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:Symfony 5(包括4)使用Gedmo Doctrine扩展进行SoftDelete

基础教程推荐