2013-05-21 5 views
8

Mein Chef installiert dieses Bündel für den Softdelete-Filter, aber die documentation ist spärlich. Wie verwende ich das in meinen Löschabfragen?StofDoctrineExtensionsBundle softdelete - Wie benutze ich es?

+4

Die Dokumentation ist nicht spärlich. StofDoctrineExtensionsBundle ist nur die Integration der [Doctrine Extensions] (https://github.com/l3pp4rd/DoctrineExtensions) für Symfony. Schauen Sie also nach der [softdeleteable Dokumentation] (https://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/softdeleteable.md) –

Antwort

38

aktivieren Sie es in Ihrem config:

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

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

Dann in Ihrem Unternehmen:

<?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; 

Dann löschen Sie einfach Entitäten wie gewohnt (die Verlängerung der Rest kümmert):

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

Vielen Dank. Sie haben diese Anweisungen nicht in die Dokumentation geschrieben! –

+1

Ich habe eine verwandte Frage: Sobald Sie eine Entität "entfernen", erhält es einen "deletedAt" Zeitstempel und es erscheint nicht in einer normalen 'find' Abfrage, was in Ordnung ist. Aber was, wenn ich auf den gelöschten Zeitstempel für eine andere Verwendung zugreifen möchte? Wird der Filter manuell deaktiviert, werden die Daten abgerufen und die einzige Option wieder aktiviert? Scheint ein wenig schmutzig und möglicherweise unsicher. – aalaap

+1

@aalaap Werfen Sie einen Blick auf http://stackoverflow.com/a/38198358/213624 – coudenysj

0

Ich brauchte auch ein anderes Puzzleteil: Die Lehre yaml config:

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