ฉันจะลบตารางโดยใช้ Doctrine2 และ Symfony2 ได้อย่างไร ฉันได้สร้างเอนทิตีและสคีมาที่อัปเดตแล้ว ตอนนี้ฉันต้องการลบโครงสร้างนี้
การลบตารางโดยใช้ Doctrine2 และ Symfony2
คำตอบ (4)
ไม่แน่ใจว่าฉันเข้าใจคำถามของคุณถูกต้องหรือไม่ คุณได้ลบเอนทิตีและต้องการลบตารางที่สร้างขึ้นออกจากฐานข้อมูลด้วยหรือไม่ ถ้าใช่:
คุณไม่สามารถทำได้ เพราะ Doctrine2 ใส่ใจเฉพาะตารางที่รู้เท่านั้น นั่นหมายถึงตารางที่เอนทิตีเป็นตัวแทน เนื่องจากคุณได้ลบเอนทิตีบางส่วนออกจากแอปพลิเคชันของคุณ Doctrine จะไม่คิดว่าตารางนั้นเป็นของแอปพลิเคชันของคุณอีกต่อไป มีสถานการณ์เมื่อมีตารางที่แตกต่างกันของแอปพลิเคชันที่แตกต่างกันในฐานข้อมูลเดียวกัน มันคงไม่สมเหตุสมผลถ้า Doctrine ลบพวกเขาเพียงเพราะมันไม่รู้อะไรเกี่ยวกับพวกเขาเลย มันจะเป็นการแบ่งแยกเชื้อชาติ...แต่กับโต๊ะ
หากคุณเพียงต้องการวางตารางโดยทางโปรแกรม คุณสามารถใช้คิวรีแบบดิบได้ เท่าที่ฉันรู้ Doctrine ไม่มีวิธีการวางโต๊ะเลย หรืออีกทางเลือกหนึ่งคุณสามารถทำได้ด้วยมือ
คุณสามารถทำ raw sql ได้
ตัวอย่างเช่นในคอนโทรลเลอร์ Symfony2:
$em = $this->getDoctrine()->getManager();
$sql = 'DROP TABLE hereYourTableName;';
$connection = $em->getConnection();
$stmt = $connection->prepare($sql);
$stmt->execute();
$stmt->closeCursor();
เพียงลบตารางที่คุณไม่ได้ใช้ด้วยตนเองอีกต่อไป...หลักคำสอนจะละเว้นตารางที่ไม่ได้แมปโดยสิ้นเชิง
ใน Doctrine 2.6.2 คุณสามารถ DROP table ได้โดยการลบคลาสเอนทิตี หลังจาก Migrations:diff คุณจะได้รับไฟล์ใหม่พร้อมแบบสอบถาม DROP TABLE Migrates:migrate จะดำเนินการคำสั่งที่ปล่อยตารางที่ต้องการ คลาสที่กำลังจะลบมีความสัมพันธ์กับเอนทิตีอื่น ดังนั้นฉันจึงต้องลบการกล่าวถึงคลาสเอนทิตีเก่าในเอนทิตีอื่นทั้งหมดอย่างไร้ความปราณี (ด้วยตนเอง) เพิ่งทดสอบ.