2013-05-21 29 views
8

我的老闆爲softdelete過濾器安裝了這個軟件包,但documentation已經超出了稀疏。我如何在我的刪除查詢中使用它?StofDoctrineExtensionsBundle softdelete - 我如何使用它?

+4

該文檔不會超越稀疏。 StofDoctrineExtensionsBundle只是Symfony的[Doctrine Extenssions](https://github.com/l3pp4rd/DoctrineExtensions)的集成。因此,請查看[softdeleteable documentation](https://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/softdeleteable.md) –

回答

38

在你的配置啓用它:

stof_doctrine_extensions: 
    orm: 
     default: 
      ... 
      softdeleteable: true 

doctrine: 
    ... 
    orm: 
     filters: 
      softdeleteable: 
       class: Gedmo\SoftDeleteable\Filter\SoftDeleteableFilter 
       enabled: true 
在實體

然後:

<?php 

namespace Foo\BarBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Gedmo\Mapping\Annotation as Gedmo; 

/** 
* ... 
* @Gedmo\SoftDeleteable(fieldName="deletedAt") 
* @ORM\Entity 
*/ 
class Foo 
{ 
    /** 
    * @var \DateTime $deletedAt 
    * 
    * @ORM\Column(name="deleted_at", type="datetime", nullable=true) 
    */ 
    private $deletedAt; 

然後,只需刪除就像你通常會(在擴展需要完成剩餘的工作)實體:

$em = $this->getDoctrine()->getManager(); 
    $em->remove($entity); 
    $em->flush(); 
+3

非常感謝。他們沒有把這些說明放在文檔中! –

+1

我有一個相關的問題:一旦你刪除一個實體,它會得到一個'deletedAt'時間戳,並且它不會在正常的'find'查詢中出現,這很好。但是,如果我想訪問刪除的時間戳以供其他用途呢?是手動禁用過濾器,獲取數據,並重新啓用它唯一的選擇?看起來有點髒,可能不安全。 – aalaap

+1

@aalaap查看http://stackoverflow.com/a/38198358/213624 – coudenysj

0

我還需要另一個拼圖部分:教條yaml配置:

ANWISBundle\Entity\Adresse: 
type: entity 
table: adresse 

gedmo: 
    soft_deleteable: 
    field_name: deleted_at 
    time_aware: false 


id: 
    id: 
     type: integer 
     generator: { strategy: AUTO } 


fields: 
    ort: 
     type: string 
     length: 100 
    plz: 
     type: string 
     columnDefinition: varchar(255) NOT NULL DEFAULT '' 

    deleted_at: 
     type: datetime 
     nullable: true 
相關問題