Встановити сценарії: Створення таблиць проти оновлення існуючих


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

Новая_табліца () екземпляр функція повертає з 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. Якщо ви ввійдете в код цього класу, ви не побачите жодної області, де він перетягується, у існуючій схемі таблиці, або перевіряєте, чи існує таблиця яким-небудь чином. Це знадобиться, якби ви використовували його для зміни таблиці.

Крім того, у Varien_Db_Adapter_Interface немає методу по рядках 'updateTable', який приймає об’єкт Varien_Db_Ddl_Table як параметр.

Це, безумовно, один із тих "кодів пахне" в Magento, оскільки у вас є два абсолютно різних блоки коду, які намагаються здійснити одне і те ж по-різному. Приведе лише до помилок.


приємна відповідь, я подумав стільки ж, дякую :)
Нік

2
А тепер зробіть запит на витяг Magento 2, щоб виправити це :-)
Alex

6

Якщо це входить в рамки проекту, ви можете розглянути можливість зміни на модель EAV, якщо модель змінюється дуже часто, як ви згадували. Це може врятувати вам проблеми з плутаниною міграції даних туди-назад. Ось стаття, яка пояснює основи EAV в Magento, щоб ви могли оцінити його та вирішити, чи підходить він для вашого проекту.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.