tiver uma pergunta, recentemente eu estava desenvolvendo um módulo com muitas tabelas no DB, e o conceito estava mudando com freqüência, então havia necessidade de alterar as tabelas existentes no DB e notei diferenças na criação de tabelas e na atualização de scripts e tabelas. Aqui está. Veja a criação do código da tabela abaixo:
$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
)
);
a função newTable () retorna a instância de Varien_Db_Ddl_Table. E a atualização do script da tabela usa uma maneira diferente de adicionar nova coluna à tabela existente, veja:
$installer->getConnection()
->addColumn($tableName, 'test', array(
'nullable' => false,
'length' => 9,
'type' => Varien_Db_Ddl_Table::TYPE_INTEGER,
'comment' => 'Test Field'
)
)
essas duas funções addColumn são diferentes e também são métodos de classes diferentes, e elas me deixam triste toda vez que preciso alterar a sintaxe.
Então, aqui está a pergunta, existe uma maneira de atualizar a tabela existente usando a instância da classe Varien_Db_Ddl_Table ?
Se estiver dentro do escopo do projeto, convém mudar para um modelo EAV se o modelo estiver mudando com muita frequência, como você mencionou. Isso pode poupar o trabalho de confundir migrações de dados. Aqui está um artigo que explica os conceitos básicos do EAV no Magento para que você possa avaliá-lo e decidir se é apropriado para o seu projeto.
fonte