前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【云+社区年度征文】数据库迁移工具是什么 PHP Phinx如何引入到框架使用

【云+社区年度征文】数据库迁移工具是什么 PHP Phinx如何引入到框架使用

原创
作者头像
宣言言言
修改2020-12-03 17:36:45
9900
修改2020-12-03 17:36:45
举报
文章被收录于专栏:宣言(Siam)博客宣言(Siam)博客

什么是Phinx

关于Git和Svn,想必各位开发者都已经很熟悉了,用于多人协作,版本控制。

在数据库方面,也一样拥有版本控制的工具,那就是今天的主题“数据库迁移工具”

并不仅仅是Phinx这个库(它只是PHP上常用的库)

数据库迁移工具可以帮我们:

  • 迁移到不同架构的数据库 如mysql和oracle等
  • 测试环境上线过程部署脚本
  • 表结构变动可追踪、可回滚

执行原理和优势

迁移到不同架构的数据库

迁移工具内置通过配置值,使用不同的数据库驱动,执行不同的sql组成,达到创建相同结构的表的需求

测试环境上线过程部署脚本

以往我们上线都需要在测试本地导出sql文件,然后到线上导入,这个过程很容易出错,甚至因为版本差异等问题,导入失败。

使用迁移工具,只需要运行一行命令,迁移工具将会帮我们逐个逐个表进行创建和插入初始数据

方便同事部署测试环境、以及项目上线

表结构变动可追踪、可回滚

如题,跟git等工具一样,它提供了版本更新记录和回滚的功能,发现问题可以快速回滚到旧版本结构。

可以记录某次表结构的用户是由哪个用户变动的(配合git等工具 查询迁移文件变更者)

修改原理

此次主题,是讲PHP的数据库迁移工具Phinx引入到第三方框架。

默认执行引入Phinx安装后,是会生成一个初始化配置文件,此时不会使用到框架的数据库配置文件,在切换环境和上线过程,需要修改的配置文件增多,容易遗漏,造成异常。

我们需要在Phinx.php中 引入框架的配置文件,修改对应的栏位 即可共用框架的配置文件

EasySwoole引入示例

<?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原生包,使用基础原生的它。

还是挺可惜的, 如果有精力的小伙伴,可以尝试更新维护它,让社区更加繁荣!

希望有更多的人,更多的开发者,分享自己的经验。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Phinx
  • 执行原理和优势
    • 迁移到不同架构的数据库
      • 测试环境上线过程部署脚本
        • 表结构变动可追踪、可回滚
        • 修改原理
        • EasySwoole引入示例
        • 其他框架
        • 尾语
        相关产品与服务
        数据库
        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档