codeigniter项目数据库升级脚本

时间:2013-03-26 20:08:04

标签: php database codeigniter

我正在寻找能够在各种环境中正确处理项目的mysql表更新的想法。我已经看了CI DB Forge课程,我相信这个可能帮助了我一点。我的想法是:

  1. 为每个数据库安装,表升级或更改创建一个新文件。该文件将包含执行每个相关任务的原始mysql查询
  2. 在加载任何控制器之前通过挂钩运行升级脚本
  3. 继续加载项目
  4. 这是正确的想法吗?这与Magento如何处理每个扩展的数据库升级非常相似。

1 个答案:

答案 0 :(得分:5)

听起来你正在寻找Migrations class。这是一个相当新的库,我认为此时的文档并不太好。

如果在application/config/migrations.php中启用此库并加载它,它将创建一个名为migrations的数据库表。从那里开始的工作流程如下:

  1. application/migrations下创建一个新文件,请确保使用顺序编号的文件名(如001_some_descriptive_name.php)命名。格式很重要,正好是3个数字,后面至少有一个_
  2. 在新文件中创建一个以文件名命名的类,因此001_some_descriptive_name.php应该包含一个名为Migration_Some_descriptive_name的类并扩展CI_Migration类。类名称外壳很重要,首先是Migration_,然后是一个大写字母,然后是小写。
  3. 在班级
  4. 中创建公开up和公开down方法
  5. 在up方法中添加迁移代码,用于更改数据库。您可以使用db forge库或只是普通的旧$this->db->query()调用。如果你需要支持多个数据库系统,Dbforge更便携,可能更好用它。
  6. down方法内添加可以反转up效果的代码。如果up添加了一列,那么down应删除该列,如果up创建了一个表,则down应删除该表,依此类推。
  7. 完成迁移类后,迁移配置文件中的migration_version
  8. 创建控制器加载迁移库并调用$this->migration->current()这将检查migration数据库表中的版本并按顺序运行迁移类updown方法在步骤6中设置的配置文件中访问迁移版本。例如,如果数据库显示您是版本2​​,并且配置说您应该在5,那么它将运行up方法按顺序使用003_...004_...005_..文件名进行迁移。如果设置较小的数字,则将调用当前down方法。数据库从0开始计数,因此不要创建000_...文件。
  9. 如果您有冒险精神,可以创建一个挂钩来加载迁移类并在每个页面加载时运行get_instance()->migration->latest(),这样一旦部署了新的迁移类,每个环境都会自动更新数据库。