安装脚本:创建表与更新现有表


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

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

这两个addColumn函数是不同的,并且它们是不同类的方法,每当我需要更改语法时,它们会使我感到难过。
所以这是一个问题,有没有办法使用Varien_Db_Ddl_Table类的实例更新现有表?

Answers:


15

似乎没有一种使用Varien_Db_Ddl_Table对象修改现有表的方法。如果进入该类的代码,您将看不到它拉入表的现有模式的任何区域,甚至检查表是否以任何方式存在。如果要使用它来修改表,则需要这样做。

另外,在Varien_Db_Adapter_Interface中,没有沿着'updateTable'的方法使用Varien_Db_Ddl_Table对象作为参数的方法。

这绝对是Magento中的“代码味道”之一,因为您有两个完全不同的代码块试图以不同的方式完成同一件事。只会导致错误。


很好的答案,我想了,谢谢:)
Nick

2
现在发出Magento 2拉动请求以修复它:-)
Alex

6

如果它在项目范围内,并且您所提到的模型更改非常频繁,那么您可能需要考虑更改为EAV模型。这样可以避免来回混淆数据迁移的麻烦。这里有一个文章,解释在Magento EAV的基础知识,这样就可以对其进行评估,并决定它是否适合你的项目。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.