什么是Phinx
关于Git和Svn,想必各位开发者都已经很熟悉了,用于多人协作,版本控制。
在数据库方面,也一样拥有版本控制的工具,那就是今天的主题“数据库迁移工具”
并不仅仅是Phinx这个库(它只是PHP上常用的库)
数据库迁移工具可以帮我们:
- 迁移到不同架构的数据库 如mysql和oracle等
- 测试环境上线过程部署脚本
- 表结构变动可追踪、可回滚
执行原理和优势
迁移到不同架构的数据库
迁移工具内置通过配置值,使用不同的数据库驱动,执行不同的sql组成,达到创建相同结构的表的需求
测试环境上线过程部署脚本
以往我们上线都需要在测试本地导出sql文件,然后到线上导入,这个过程很容易出错,甚至因为版本差异等问题,导入失败。
使用迁移工具,只需要运行一行命令,迁移工具将会帮我们逐个逐个表进行创建和插入初始数据
方便同事部署测试环境、以及项目上线
表结构变动可追踪、可回滚
如题,跟git等工具一样,它提供了版本更新记录和回滚的功能,发现问题可以快速回滚到旧版本结构。
可以记录某次表结构的用户是由哪个用户变动的(配合git等工具 查询迁移文件变更者)
修改原理
此次主题,是讲PHP的数据库迁移工具Phinx引入到第三方框架。
默认执行引入Phinx安装后,是会生成一个初始化配置文件,此时不会使用到框架的数据库配置文件
,在切换环境和上线过程,需要修改的配置文件增多,容易遗漏,造成异常。
我们需要在Phinx.php中 引入框架的配置文件,修改对应的栏位 即可共用框架的配置文件
EasySwoole引入示例
代码语言:txt复制<?php
defined('SWOOLE_VERSION') or define('SWOOLE_VERSION', intval(phpversion('swoole')));
defined('EASYSWOOLE_ROOT') or define('EASYSWOOLE_ROOT', realpath(getcwd()));
defined('EASYSWOOLE_SERVER') or define('EASYSWOOLE_SERVER', 1);
defined('EASYSWOOLE_WEB_SERVER') or define('EASYSWOOLE_WEB_SERVER', 2);
defined('EASYSWOOLE_WEB_SOCKET_SERVER') or define('EASYSWOOLE_WEB_SOCKET_SERVER', 3);
$databaseConfig = require_once "./dev.php";
define('PHINX_PRE', $databaseConfig['MYSQL']['prefix']);
return
[
'paths' => [
'migrations' => EASYSWOOLE_ROOT.'/database/migrations',
'seeds' => EASYSWOOLE_ROOT.'/database/seeds'
],
'environments' => [
'default_migration_table' => PHINX_PRE.'migrate_logs',
'default_environment' => 'development',
'production' => [
'adapter' => 'mysql',
'host' => $databaseConfig['MYSQL']['host'],
'name' => $databaseConfig['MYSQL']['database'],
'user' => $databaseConfig['MYSQL']['user'],
'pass' => $databaseConfig['MYSQL']['password'],
'port' => $databaseConfig['MYSQL']['port'],
'charset' => $databaseConfig['MYSQL']['charset'],
],
'development' => [
'adapter' => 'mysql',
'host' => $databaseConfig['MYSQL']['host'],
'name' => $databaseConfig['MYSQL']['database'],
'user' => $databaseConfig['MYSQL']['user'],
'pass' => $databaseConfig['MYSQL']['password'],
'port' => $databaseConfig['MYSQL']['port'],
'charset' => $databaseConfig['MYSQL']['charset'],
],
'testing' => [
'adapter' => 'mysql',
'host' => $databaseConfig['MYSQL']['host'],
'name' => $databaseConfig['MYSQL']['database'],
'user' => $databaseConfig['MYSQL']['user'],
'pass' => $databaseConfig['MYSQL']['password'],
'port' => $databaseConfig['MYSQL']['port'],
'charset' => $databaseConfig['MYSQL']['charset'],
]
],
'version_order' => 'creation'
];
其他框架
在Thinkphp中也是一样的道理 只需要require 配置文件,替换变量使用即可
尾语
官网:https://book.cakephp.org/phinx/0/en/index.html
中文翻译手册: https://www.kancloud.cn/liujin/phinx-doc/580899
这里说一下 ,Thinkphp官方已经提供了对Phinx工具的封装包,但是我为什么不使用呢?
我查看了Thinkphp官方包的依赖以及更新记录,已经很久没更新了,对于Phinx也不是通过composer来依赖,而是下载源码硬性引入,可能无法更新Phinx版本,无法使用最新的特性,所以我还是引入了Phinx原生包,使用基础原生的它。
还是挺可惜的, 如果有精力的小伙伴,可以尝试更新维护它,让社区更加繁荣!
希望有更多的人,更多的开发者,分享自己的经验。