用 https://github.com/cakephp/phinx框架无关最常用。composerrequirerobmorgan/phinx 配置// phinx.php放项目根目录return[paths[migrationsdb/migrations],environments[default_environmentdev,dev[adaptermysql,hostlocalhost,namemydb,userroot,pass,],prod[adaptermysql,hostgetenv(DB_HOST),namegetenv(DB_NAME),usergetenv(DB_USER),passgetenv(DB_PASS),],],];创建迁移文件 vendor/bin/phinx create CreateUsersTable# 生成 db/migrations/20240319120000_create_users_table.php写迁移?phpusePhinx\Migration\AbstractMigration;classCreateUsersTableextendsAbstractMigration{publicfunctionup():void{$this-table(users)-addColumn(name,string,[limit100])-addColumn(email,string,[limit100])-addColumn(created_at,datetime)-addIndex(email,[uniquetrue])-create();}publicfunctiondown():void{$this-table(users)-drop()-save();}}常用命令 vendor/bin/phinx status# 看哪些迁移跑了、哪些没跑vendor/bin/phinx migrate# 跑所有未执行的迁移vendor/bin/phinx migrate-e prod# 指定环境vendor/bin/phinx rollback# 回滚最后一次vendor/bin/phinx rollback-t0# 回滚到初始状态vendor/bin/phinx migrate-t20240319120000# 迁移到指定版本改表结构加列/改列publicfunctionup():void{$this-table(users)-addColumn(phone,string,[afteremail,nulltrue])-changeColumn(name,string,[limit200])// 改长度-removeColumn(old_field)-save();}CI里自动跑# .github/workflows/deploy.yml-run:vendor/bin/phinx migrate-e prod---Phinx 在数据库里建一张 phinxlog 表记录哪些迁移跑过了文件名前面的时间戳就是版本号。up()往前走down()往回退status 随时看当前在哪个版本。
php方案 PHP的数据库Schema版本管理
用 https://github.com/cakephp/phinx框架无关最常用。composerrequirerobmorgan/phinx 配置// phinx.php放项目根目录return[paths[migrationsdb/migrations],environments[default_environmentdev,dev[adaptermysql,hostlocalhost,namemydb,userroot,pass,],prod[adaptermysql,hostgetenv(DB_HOST),namegetenv(DB_NAME),usergetenv(DB_USER),passgetenv(DB_PASS),],],];创建迁移文件 vendor/bin/phinx create CreateUsersTable# 生成 db/migrations/20240319120000_create_users_table.php写迁移?phpusePhinx\Migration\AbstractMigration;classCreateUsersTableextendsAbstractMigration{publicfunctionup():void{$this-table(users)-addColumn(name,string,[limit100])-addColumn(email,string,[limit100])-addColumn(created_at,datetime)-addIndex(email,[uniquetrue])-create();}publicfunctiondown():void{$this-table(users)-drop()-save();}}常用命令 vendor/bin/phinx status# 看哪些迁移跑了、哪些没跑vendor/bin/phinx migrate# 跑所有未执行的迁移vendor/bin/phinx migrate-e prod# 指定环境vendor/bin/phinx rollback# 回滚最后一次vendor/bin/phinx rollback-t0# 回滚到初始状态vendor/bin/phinx migrate-t20240319120000# 迁移到指定版本改表结构加列/改列publicfunctionup():void{$this-table(users)-addColumn(phone,string,[afteremail,nulltrue])-changeColumn(name,string,[limit200])// 改长度-removeColumn(old_field)-save();}CI里自动跑# .github/workflows/deploy.yml-run:vendor/bin/phinx migrate-e prod---Phinx 在数据库里建一张 phinxlog 表记录哪些迁移跑过了文件名前面的时间戳就是版本号。up()往前走down()往回退status 随时看当前在哪个版本。