我正在寻找能够在各种环境中正确处理项目的mysql表更新的想法。我已经看了CI DB Forge
课程,我相信这个可能帮助了我一点。我的想法是:
这是正确的想法吗?这与Magento如何处理每个扩展的数据库升级非常相似。
答案 0 :(得分:5)
听起来你正在寻找Migrations class。这是一个相当新的库,我认为此时的文档并不太好。
如果在application/config/migrations.php
中启用此库并加载它,它将创建一个名为migrations
的数据库表。从那里开始的工作流程如下:
application/migrations
下创建一个新文件,请确保使用顺序编号的文件名(如001_some_descriptive_name.php
)命名。格式很重要,正好是3个数字,后面至少有一个_
。001_some_descriptive_name.php
应该包含一个名为Migration_Some_descriptive_name
的类并扩展CI_Migration
类。类名称外壳很重要,首先是Migration_
,然后是一个大写字母,然后是小写。up
和公开down
方法
$this->db->query()
调用。如果你需要支持多个数据库系统,Dbforge更便携,可能更好用它。down
方法内添加可以反转up
效果的代码。如果up
添加了一列,那么down
应删除该列,如果up
创建了一个表,则down
应删除该表,依此类推。migration_version
。$this->migration->current()
这将检查migration
数据库表中的版本并按顺序运行迁移类up
或down
方法在步骤6中设置的配置文件中访问迁移版本。例如,如果数据库显示您是版本2,并且配置说您应该在5,那么它将运行up
方法按顺序使用003_...
,004_...
,005_..
文件名进行迁移。如果设置较小的数字,则将调用当前down
方法。数据库从0开始计数,因此不要创建000_...
文件。如果您有冒险精神,可以创建一个挂钩来加载迁移类并在每个页面加载时运行get_instance()->migration->latest()
,这样一旦部署了新的迁移类,每个环境都会自动更新数据库。