当前位置: 首页 > 工具软件 > Phinx > 使用案例 >

php 数据库操作 转移,PHP 数据库迁移工具 - phinx

袁琪
2023-12-01

数据库迁移就像是数据库的版本控制,可以让团队轻松修改并共享应用程序的数据库结构。PHP Laravel 框架的 Artisan 命令行工具就有提供数据库迁移相关的命令。由于项目是基于 PHP Yaf 框架开发,所以,这里主要记录一下项目中所用到的另一款数据库迁移工具 - Phinx。

Phinx 主要有以下几个特性:在多种数据库间可移植。

独立于 PHP 框架。

简单的安装过程。

简单的命令行操作。

与其他各种 PHP 工具(Phing、PHPUnit)和 Web 框架集成。使用 Phinx rollback 命令回滚指定版本时一定要注意,rollback 将会执行指定版本之后的所有版本的向下迁移操作。(在生产环境中,建议不写或者注释 down 函数中的内容,确保不会因操作失误,导致生产环境中的数据库表及数据被破坏)

安装及初始化

使用 Composer 安装,如下:php composer.phar require robmorgan/phinx

创建迁移目录 db/migrations(确保目录具有读写权限):mkdir -p db/migrations

cd db/migrations

初始化 Phinx 并完成 phinx.yml 配置:vendor/bin/phinx init

编写迁移

运行以下命令,创建迁移文件:php vendor/bin/phinx create MyNewMigration

生成文件名格式为 YYYYMMDDHHMMSS_my_new_migration.php 的迁移文件,初始化文件内容为:<?php

use Phinx\Migration\AbstractMigration;

class MyNewMigration extends AbstractMigration

{

/**

* Change Method.

*

* Write your reversible migrations using this method.

*

* More information on writing migrations is available here:

* http://docs.phinx.org/en/latest/migrations.html#the-abstractmigration-class

*

* The following commands can be used in this method and Phinx will

* automatically reverse them when rolling back:

*

* createTable

* renameTable

* addColumn

* renameColumn

* addIndex

* addForeignKey

*

* Remember to call "create()" or "update()" and NOT "save()" when working

* with the Table class.

*/

public function change()

{

}

}

change 函数

Phinx 0.2.0 支持一个新特性,叫做可逆迁移。你只需要在 change 函数中编写向上迁移的逻辑,那么在执行向下迁移时,Phinx 会自动帮你处理。例如:<?php

use Phinx\Migration\AbstractMigration;

class CreateUserLoginsTable extends AbstractMigration

{

/**

* Change Method.

*

* More information on this method is available here:

* http://docs.phinx.org/en/latest/migrations.html#the-change-method

*

* Uncomment this method if you would like to use it.

*/

public function change()

{

// create the table

$table = $this->table('user_logins');

$table->addColumn('user_id', 'integer')

->addColumn('created', 'datetime')

->create();

}

/**

* Migrate Up.

*/

public function up()

{

}

/**

* Migrate Down.

*/

public function down()

{

}

}

当执行向上迁移时,Phinx 会创建 user_logins 表,当执行向下迁移(回滚)时,Phinx 会自动删除 user_logins 表。

注意,如果存在 change 函数,那么 up、down 函数会被忽略。

Phinx 只支持以下函数的可逆迁移:createTable

renameTable

addColumn

renameColumn

addIndex

addForeignKey

如果函数不支持可逆迁移,那么在执行向下迁移(回滚)时,Phinx 会抛出 IrreversibleMigrationException 异常。

up 函数

当执行 php vendor/bin/phinx migrate 命令时,如果 Phinx 检测到某个迁移文件还未执行过,那么就自动执行该迁移文件的 up() 函数。在该函数中,主要是编写想要对数据库做哪些修改。

down 函数

当执行 php vendor/bin/phinx rollback 命令时,如果 Phinx 检测到某个迁移文件已经执行过,那么就自动执行该迁移文件的 down() 函数。在该函数中,主要是编写想要对数据库做哪些还原(对应 down 函数中的修改)。

执行查询

可以使用 execute()、query() 函数执行原生 SQL 语句。其中 execute() 函数返回受影响的行数,query 函数返回 PDOStatement 对象结果集。在项目中,如果没有特定的需求,可以直接使用这种方式编写 up、down 函数,因为 Phinx 只支持通用所有数据库的列类型,对于 MySQL 特有的列类型,如:enum、set、blob、json 等,需要引入 MysqlAdapter 类。

参考资料

 类似资料: