Instal skrip: Membuat tabel vs. memperbarui yang sudah ada

22

punya satu pertanyaan, baru-baru ini saya sedang mengembangkan satu modul dengan banyak tabel di DB, dan konsep sering berubah, jadi perlu mengubah tabel yang ada di DB, dan saya melihat perbedaan dalam pembuatan skrip tabel dan peningkatan tabel. Ini dia Lihat membuat kode tabel di bawah ini:

$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
    )
);

fungsi newTable () mengembalikan instance dari Varien_Db_Ddl_Table Dan memutakhirkan skrip tabel menggunakan cara berbeda untuk menambahkan kolom baru ke tabel yang ada, lihat:

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

dua fungsi addColumn ini berbeda dan juga mereka adalah metode kelas yang berbeda, dan mereka membuat saya sedih setiap kali saya perlu mengubah sintaks.
Jadi di sini ada pertanyaan, apakah ada cara untuk memperbarui tabel yang ada menggunakan instance dari kelas Varien_Db_Ddl_Table ?

Nick
sumber

Jawaban:

15

Tampaknya tidak ada cara untuk memodifikasi tabel yang ada menggunakan objek Varien_Db_Ddl_Table. Jika Anda masuk ke kode untuk kelas itu, Anda tidak akan melihat area di mana ia menarik skema yang ada untuk tabel, atau memeriksa untuk melihat apakah tabel itu ada atau tidak. Itu akan diperlukan jika Anda menggunakannya untuk memodifikasi tabel.

Selain itu, dalam Varien_Db_Adapter_Interface tidak ada metode di sepanjang baris 'updateTable' yang mengambil objek Varien_Db_Ddl_Table sebagai parameter.

Ini jelas merupakan salah satu 'bau kode' di Magento, karena Anda memiliki dua blok kode yang sama sekali berbeda yang berusaha menyelesaikan hal yang sama dengan cara yang berbeda. Hanya akan menyebabkan bug.

Tim Reynolds
sumber
jawaban yang bagus, saya pikir banyak, terima kasih :)
Nick
2
Dan sekarang buat permintaan tarik Magento 2 untuk memperbaikinya :-)
Alex
6

Jika itu dalam lingkup proyek Anda mungkin ingin melihat perubahan ke model EAV jika model tersebut sangat sering berubah seperti yang Anda sebutkan. Ini dapat menghemat masalah membingungkan migrasi data bolak-balik. Berikut adalah artikel yang menjelaskan dasar-dasar EAV di Magento sehingga Anda dapat mengevaluasinya dan memutuskan apakah sesuai untuk proyek Anda.

mybluevan
sumber