我正在寻找想法来正确处理跨环境的项目的 mysql 表更新。我看过这CI DB Forge
门课,我相信这可能会对我有所帮助。我的想法是:
- 为每个数据库安装、表升级或更改创建一个新文件。该文件将包含执行每个相关任务的原始 mysql 查询
- 在加载任何控制器之前通过钩子运行升级脚本
- 继续加载项目
这是正确的想法吗?这与 Magento 处理每个扩展的数据库升级的方式非常相似。
我正在寻找想法来正确处理跨环境的项目的 mysql 表更新。我看过这CI DB Forge
门课,我相信这可能会对我有所帮助。我的想法是:
这是正确的想法吗?这与 Magento 处理每个扩展的数据库升级的方式非常相似。
听起来您正在寻找Migrations 课程。这是一个相当新的库,我认为目前的文档不太好。
如果您启用此库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
的迁移方法。如果您设置较低的数字,则将调用当前的方法。数据库从 0 开始计数,所以不要创建文件。003_...
004_...
005_..
down
000_...
如果您喜欢冒险,您可以创建一个加载迁移类并get_instance()->migration->latest()
在每个页面加载时运行的钩子,这样一旦您部署新的迁移类,每个环境都会自动更新数据库。