กรองแถวที่ไม่ตรงตามเงื่อนไขในหลักคำสอนออกโดยอัตโนมัติ

ฉันมีฐานข้อมูลที่ใช้งานอยู่แล้ว และฉันไม่สามารถเปลี่ยนแปลงได้จริงๆ ในฐานข้อมูลนี้ ฉันใช้ "soft Delete": แทนที่จะลบบันทึกจริงๆ ฉันแค่แก้ไขแฟล็ก (เช่น การตั้งค่า del=1)

ฉันไม่ได้ใช้เทมเพลต GEDMO (SoftDelete) แต่ฉันต้องการฟังก์ชันเดียวกัน ขณะนี้เมื่อฉันใช้ฟังก์ชัน QueryBuilder/find ฟังก์ชันเหล่านี้จะส่งคืนระเบียนด้วย del=1 แนวคิดเดียวกันเกี่ยวกับการทำงานของเอนทิตีของสมาคม ฉันต้องตรวจสอบทุกครั้งว่า del=0

มีวิธีกรองบันทึกด้วยแฟล็ก del=1 โดยอัตโนมัติ เว้นแต่จะมีการร้องขออย่างชัดเจนหรือไม่


person Raisin    schedule 06.03.2015    source แหล่งที่มา
comment
ฉันเพิ่งจัดระเบียบไวยากรณ์ของคุณนิดหน่อยและหวังว่าคำถามนี้จะทำให้เข้าใจง่ายขึ้นอีกหน่อย โปรดข้ามไปแก้ไขหากฉันทำอะไรไม่ถูกต้อง ฉันได้พยายามทำให้ชื่อมีความเฉพาะเจาะจงมากขึ้น แก้ไขอีกครั้งหากจำเป็น   -  person Duncan Jones    schedule 06.03.2015


คำตอบ (2)


คุณอาจใช้ตัวกรองหลักคำสอนได้:

http://doctrine-orm.readthedocs.org/en/latest/reference/filters.html http://www.michaelperrin.fr/2014/07/25/doctrine-filters/

เพื่อปิดการใช้งาน:

http://doctrine-orm.readthedocs.org/en/latest/reference/filters.html#disabling-enabling-filters-and-setting-parameters

person LPodolski    schedule 06.03.2015

อีกมุมมองหนึ่งคือการทำให้โค้ดของคุณอ่านง่ายขึ้นและอาจง่ายขึ้นโดยทำสิ่งนี้:

$entity = $em->getRepository("MyBundle:Entity")->findBy(['del' => 0]);

นี่เป็นการเพิ่มโค้ดเพียงเล็กน้อยและชัดเจนต่อผู้อ่านว่าคุณกำลังทำอะไรอยู่

แก้ไข

หรือหากฐานข้อมูลและสิทธิ์ของคุณอนุญาต (เช่น รูทใน MySQL) คุณสามารถสร้างมุมมองที่มีเพียง del=0 บันทึกได้ สำหรับ MySQL นี่คือเอกสาร CREATE VIEW หลักคำสอนอนุญาตให้ใช้มุมมอง

person geoB    schedule 06.03.2015