ลบได้แบบนุ่มนวล ปิดการใช้งานสำหรับเอนทิตี

ฉันใช้ DoctrineExtensions กับ StofDoctrineExtensionsBundle เพื่อรับพฤติกรรมการลบแบบนุ่มนวล

มันใช้งานได้ดีจริงๆ แต่ฉันต้องปิดมันสำหรับหนึ่งในเอนทิตีของฉัน ฉันจะทำเช่นนั้นได้อย่างไร? ฉันเห็นว่ามีวิธี 'disableForEntity' บางทีฉันควรตั้งค่าที่ไหนสักแห่งด้วยวิธีนี้ซึ่งจะทำงานได้ทุกที่ ฉันต้องการปิดตัวกรองนี้สำหรับหนึ่งเอนทิตีในแอปพลิเคชัน (การดำเนินการทั้งหมด)

ปัญหาคือเนื่องจากเอนทิตีเฉพาะของฉันขยายเอนทิตีฐานด้วยตัวกรองนี้

เป็นไปได้หรือฉันต้องปิดการใช้งานทุกครั้งที่ต้องการใช้เอนทิตีเฉพาะของฉัน


person Michal Olszowski    schedule 16.12.2013    source แหล่งที่มา


คำตอบ (1)


ฉันคิดว่าในเอนทิตีของคุณคุณมี:

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

คุณต้องลบพฤติกรรมออกจากเอนทิตีที่ไม่ควรลบแบบนุ่มนวล ดังนั้นคุณต้องลบออกเท่านั้น

* @Gedmo\SoftDeleteable(fieldName="deletedAt")
person Amine    schedule 16.12.2013
comment
ฉันมีมันใน Base Entity ของฉัน และเอนทิตีเฉพาะของฉันก็ขยาย Base Entity นี้... เช่นเดียวกับคลาสนี้ AdmUserHasMails จะขยาย BaseEntity - person Michal Olszowski; 16.12.2013
comment
คุณไม่สามารถปิดใช้งานลักษณะการทำงานสำหรับเอนทิตีเดียวได้ เนื่องจากเป็นเพียงการใช้งานของคุณที่ทำให้เอนทิตีทั้งหมดของคุณสามารถลบออกได้ ไม่ใช่ส่วนขยายหลักคำสอน - person Pierre; 16.12.2013
comment
สร้าง SoftDeleteableEntity ที่ขยาย BaseEntity โดยแบบแรกมีคำอธิบายประกอบและแบบหลังไม่มี จากนั้นขยายคลาสโมเดลของคุณจากซูเปอร์คลาสที่เหมาะสม แน่นอนว่านี่จะกลายเป็นเรื่องน่าปวดหัวหากคุณมีคลาสแบบกำหนดเองหลายคลาสเช่นนี้ ซึ่ง ณ จุดนี้คุณควรพิจารณาย้ายคำอธิบายประกอบไปยังคลาสเอนทิตีจริงแทน กล่าวโดยย่อ: อย่าใส่สิ่งต่าง ๆ ไว้ในซูเปอร์คลาสที่ไม่สามารถใช้ได้กับคลาสย่อย ทั้งหมด - person Martin Lie; 17.12.2013