インストールスクリプト:テーブルの作成と既存のテーブルの更新


22

質問が1つあります。最近、DBに多くのテーブルを持つ1つのモジュールを開発しており、概念が頻繁に変更されていたため、DBの既存のテーブルを変更する必要がありました。どうぞ。以下のテーブルコードの作成をご覧ください。

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

これら2つのaddColumn関数は異なり、異なるクラスのメソッドでもあり、構文を変更する必要があるたびに悲しくなります。
そこで質問がありますが、Varien_Db_Ddl_Tableクラスのインスタンスを使用して既存のテーブルを更新する方法はありますか?

回答:


15

Varien_Db_Ddl_Tableオブジェクトを使用して既存のテーブルを変更する方法はないようです。そのクラスのコードにアクセスすると、テーブルの既存のスキーマをプルする領域が表示されず、テーブルが何らかの形で存在するかどうかもチェックされます。テーブルの変更に使用する場合、これが必要になります。

さらに、Varien_Db_Adapter_Interfaceには、Varien_Db_Ddl_Tableオブジェクトをパラメーターとして取る「updateTable」の行に沿ったメソッドはありません。

これは間違いなく、Magentoの「コードのにおい」の1つです。2つの完全に異なるコードブロックが異なる方法で同じことを達成しようとしているためです。バグにつながるだけです。


いい答え、私も同じように思った、ありがとう:)
ニック

2
そして今、Magento 2プルリクエストを行って修正します:
アレックス

6

プロジェクトの範囲内にある場合、前述のようにモデルが頻繁に変更される場合は、EAVモデルへの変更を検討することをお勧めします。これにより、データの移行を前後に混乱させる手間を省くことができます。ここにMagentoのEAVの基本を説明する記事がありますので、それを評価し、プロジェクトに適しているかどうかを判断できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.