codeigniter项目数据库升级脚本

Jar*_*ier 0 php database codeigniter

我正在寻找能够在各种环境中正确处理项目的mysql表更新的想法.我看了CI DB Forge上课,我相信这可能对我有所帮助.我的想法是:

  1. 为每个数据库安装,表升级或更改创建一个新文件.该文件将包含执行每个相关任务的原始mysql查询
  2. 在加载任何控制器之前,通过挂钩运行升级脚本
  3. 继续加载项目

这是正确的想法吗?这与Magento如何处理每个扩展的数据库升级非常相似.

com*_*857 5

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

如果您启用此库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. 在类中创建up公共down方法和公共方法
  4. 在up方法中添加迁移代码,用于更改数据库.您可以使用db forge库或只使用普通旧$this->db->query()调用.如果你需要支持多个数据库系统,Dbforge更便携,可能更好用.
  5. down方法内部添加可以反转效果的代码up.如果up添加一列,down则应删除该列,如果up创建表,down则应删除该表,依此类推.
  6. 完成迁移类后,migration_version将迁移配置文件内部.
  7. 创建一个控制器加载迁移库并调用$this->migration->current()它将检查migration数据库表中的版本并运行迁移类updown方法,以便在步骤6中设置的配置文件中访问迁移版本.例如,如果数据库说你处于第2版,以及配置说,你应该是5,那么它将运行up的迁移的方法有003_...,004_...,005_..以文件名.如果设置较小的数字,则down调用方法的当前值.数据库从0开始计数,因此不要创建000_...文件.

如果您有冒险精神,可以创建一个挂钩来加载迁移类并get_instance()->migration->latest()在每个页面加载时运行,这样一旦部署新的迁移类,每个环境都会自动更新数据库.