У меня был один вопрос, недавно я разрабатывал один модуль с большим количеством таблиц в БД, и концепция часто менялась, поэтому было необходимо изменить существующие таблицы в БД, и я заметил разницу в создании сценариев и обновлении таблиц. Ну вот. Посмотрите на создание кода таблицы ниже:
$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 ?
Если это входит в рамки проекта, вы можете захотеть перейти на модель EAV, если модель меняется очень часто, как вы упомянули. Это поможет вам избежать путаницы при переносе данных туда-сюда. Вот статья, которая объясняет основы EAV в Magento, чтобы вы могли оценить ее и решить, подходит ли она для вашего проекта.
источник