ติดตั้งสคริปต์: การสร้างตารางเทียบกับการปรับปรุงที่มีอยู่


22

มีคำถามหนึ่งเมื่อเร็ว ๆ นี้ฉันกำลังพัฒนาหนึ่งโมดูลที่มีจำนวนมากของตารางในฐานข้อมูลและแนวคิดที่มีการเปลี่ยนแปลงบ่อยดังนั้นจึงจำเป็นต้องเปลี่ยนตารางที่มีอยู่ในฐานข้อมูลและฉันสังเกตเห็นความแตกต่างในการสร้างตารางและสคริปต์อัพเกรดตาราง ไปเลย ดูที่การสร้างรหัสตารางด้านล่าง:

$table = $installer->getConnection()
    ->newTable($installer->getTable('module/table'))
    ->addColumn('id', Varien_Db_Ddl_Table::TYPE_INTEGER, 9, array(
        'nullable' => false,
        'primary' => true,
        'identity' => true,
        'auto_increment' => true
    )
);

NewTable ()เช่นฟังก์ชั่นผลตอบแทนของVarien_Db_Ddl_Table และสคริปต์ตารางการอัพเกรดใช้วิธีที่แตกต่างเพื่อเพิ่มคอลัมน์ใหม่ในตารางที่มีอยู่จะดู:

$installer->getConnection()
    ->addColumn($tableName, 'test', array(
        'nullable' => false,
        'length' => 9,
        'type' => Varien_Db_Ddl_Table::TYPE_INTEGER,
        'comment' => 'Test Field'
    )
)

ฟังก์ชั่น addColumn ทั้งสองนี้มีความแตกต่างกันและเป็นวิธีการเรียนที่แตกต่างกันและทำให้ฉันเสียใจทุกครั้งที่ต้องเปลี่ยนไวยากรณ์
ดังนั้นนี่คือคำถามมีวิธีอัปเดตตารางที่มีอยู่โดยใช้อินสแตนซ์ของคลาสVarien_Db_Ddl_Tableหรือไม่

คำตอบ:


15

ดูเหมือนจะไม่มีวิธีการแก้ไขตารางที่มีอยู่โดยใช้วัตถุ Varien_Db_Ddl_Table ถ้าคุณเข้าไปในรหัสสำหรับคลาสนั้นคุณจะไม่เห็นพื้นที่ที่มันดึงเข้าไปใน schema ที่มีอยู่สำหรับตารางหรือตรวจสอบเพื่อดูว่าตารางนั้นมีอยู่หรือไม่ จะต้องมีถ้าคุณจะใช้สำหรับการปรับเปลี่ยนตาราง

นอกจากนี้ใน Varien_Db_Adapter_Interface ไม่มีวิธีตามบรรทัดของ 'updateTable' ที่ใช้ Varien_Db_Ddl_Table วัตถุเป็นพารามิเตอร์

นี่เป็นหนึ่งใน 'กลิ่นรหัส' ใน Magento อย่างแน่นอนเนื่องจากคุณมีโค้ดที่แตกต่างกันสองกลุ่มโดยพยายามที่จะทำสิ่งเดียวกันในวิธีที่ต่างกัน จะนำไปสู่ข้อบกพร่องเท่านั้น


คำตอบที่ดีผมคิดว่าเป็นมากขอบคุณ :)
นิค

2
และตอนนี้ต้องการขอวีโอไอพี 2 ดึงที่จะแก้ไขได้ :-)
อเล็กซ์

6

หากอยู่ในขอบเขตของโครงการคุณอาจต้องการเปลี่ยนเป็นการใช้แบบจำลอง EAV หากแบบจำลองนั้นเปลี่ยนแปลงบ่อยมากตามที่คุณกล่าวถึง วิธีนี้ช่วยให้คุณไม่ต้องสับสนกับการโยกย้ายข้อมูลไปมา นี่คือบทความที่อธิบายพื้นฐานของ EAV ใน Magento เพื่อให้คุณสามารถประเมินและตัดสินใจว่าเหมาะสมกับโครงการของคุณหรือไม่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.