Scriptleri yükleyin: Tabloları oluşturma ve mevcutları güncelleme


22

Bir sorum var, son zamanlarda DB'de çok sayıda tablo içeren bir modül geliştiriyordum ve konsept sık sık değişiyordu, bu yüzden DB'de mevcut tabloları değiştirmem gerekiyordu ve tablo oluşturmada komut dosyası ve tablo yükseltme konusunda fark olduğunu fark ettim. Hadi bakalım. Aşağıdaki tablo kodunu oluşturmaya bakın:

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

yenitablo () fonksiyonu döner örneği Varien_Db_Ddl_Table Ve yükseltme tablo komut bir göz atın, mevcut tabloya yeni bir sütun eklemek farklı bir yol kullanır:

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

bu iki addColumn işlevi farklıdır ve ayrıca farklı sınıfların yöntemleridir ve sözdizimini her değiştirmem gerektiğinde beni üzüyorlar.
Yani burada soru, Varien_Db_Ddl_Table sınıfının örneğini kullanarak mevcut tabloyu güncellemenin bir yolu var mı?

Yanıtlar:


15

Varien_Db_Ddl_Table nesnesini kullanarak varolan bir tabloyu değiştirmenin bir yolu görünmüyor. Bu sınıfın koduna girerseniz, tablonun mevcut şemasını çekeceği bir alan göremezsiniz veya tablonun herhangi bir şekilde olup olmadığını bile kontrol edebilirsiniz. Masayı değiştirmek için kullanmak olsaydı bu gerekli olurdu.

Ek olarak, Varien_Db_Adapter_Interface içinde, Varien_Db_Ddl_Table nesnesini parametre olarak alan 'updateTable' satırları boyunca hiçbir yöntem yoktur.

Bu kesinlikle Magento'da 'kod kokuyor' ifadelerinden biridir, çünkü aynı şeyi farklı şekillerde gerçekleştirmeye çalışan iki farklı kod bloğunuz vardır. Sadece böceklere yol açacaktır.


güzel cevap, ben çok düşündüm, teşekkürler :)
Nick

2
Ve şimdi :-) bunu düzeltmek için bir Magento 2 çekme isteği yapmak
Alex

6

Proje kapsamındaysa, model belirttiğiniz sıklıkta değişiyorsa, bir EAV modeline geçmek isteyebilirsiniz. Bu, veri geçişlerini ileri geri karıştırmakta zorluk çekmenize neden olabilir. İşte Magento'daki EAV'ın temellerini açıklayan bir makale . Böylece onu değerlendirebilir ve projeniz için uygun olup olmadığına karar verebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.