首先,PHP Composer, ThinkPHP,Yii 这三者的数据库迁移都是基于Phinx来操作。而对于基础数据库的建表可以导出一份SQL文件作为基础数据也不需要在写create table什么的比较费时间。
讲解场景:当你又一个sell数据库,其中有表sell,你要新增tille_2字段,其中sell表基础SQL语句是:
-- Adminer 4.3.1 MySQL dump
SET NAMES utf8;
SET time_zone = '+00:00';
SET foreign_key_checks = 0;
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
DROP TABLE IF EXISTS `wm_abouts`;
CREATE TABLE `wm_abouts` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`skey` varchar(100) NOT NULL DEFAULT '0' COMMENT '标识',
`title` varchar(100) DEFAULT '' COMMENT '标题',
`content` text COMMENT '内容',
`video` varchar(255) DEFAULT NULL,
`w_time` int(10) unsigned NOT NULL COMMENT '创建时间',
`status` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '状态(0隐藏,1显示)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='单页管理';
-- 2021-10-13 05:47:22
php7.2 vendor/bin/phinx init
生成了一个配置文件[phinx.php]:
<?php
$dbConfig = require '../app/database.php';
return
[
'paths' => [
'migrations' => '%%PHINX_CONFIG_DIR%%/db/migrations', // 文件夹
'seeds' => '%%PHINX_CONFIG_DIR%%/db/seeds' // 文件夹
],
'environments' => [
'default_migration_table' => 'phinxlog', // 生成一个表记录日志
'default_environment' => 'development', // 运行下列那个数据库环境配置
'production' => [
'adapter' => 'mysql', // 数据库类型
'host' => $dbConfig['hostname'], // 数据库地址
'name' => $dbConfig['database'], // 数据库名
'user' => $dbConfig['username'], // 数据库连接账号
'pass' => $dbConfig['password'], // 数据库连接密码
'port' => $dbConfig['hostport'], // 数据库端口号
'table_prefix' => $dbConfig['hostport']['prefix'], // 数据库前缀
'charset' => 'utf8', // 数据库字符集
],
'development' => [
'adapter' => 'mysql',
'host' => $dbConfig['hostname'],
'name' => $dbConfig['database'],
'user' => $dbConfig['username'],
'pass' => $dbConfig['password'],
'port' => $dbConfig['hostport'],
'table_prefix' => $dbConfig['hostport']['prefix'],
'charset' => 'utf8',
],
'testing' => [
'adapter' => 'mysql',
'host' => $dbConfig['hostname'],
'name' => $dbConfig['database'],
'user' => $dbConfig['username'],
'pass' => $dbConfig['password'],
'port' => $dbConfig['hostport'],
'table_prefix' => $dbConfig['hostport']['prefix'],
'charset' => 'utf8',
]
],
'version_order' => 'creation'
];
php7.2 vendor/bin/phinx create ChangeTableAbout
默认代码如下:
<?php
declare(strict_types=1);
use Phinx\Migration\AbstractMigration;
final class Abouts extends AbstractMigration
{
/**
* Change Method.
*
* Write your reversible migrations using this method.
*
* More information on writing migrations is available here:
* https://book.cakephp.org/phinx/0/en/migrations.html#the-change-method
*
* Remember to call "create()" or "update()" and NOT "save()" when working
* with the Table class.
*/
public function change(): void
{
}
}
注意:需要你自己填充代码到change:
<?php
declare(strict_types=1);
use Phinx\Migration\AbstractMigration;
final class Abouts extends AbstractMigration
{
/**
* Change Method.
*
* Write your reversible migrations using this method.
*
* More information on writing migrations is available here:
* https://book.cakephp.org/phinx/0/en/migrations.html#the-change-method
*
* Remember to call "create()" or "update()" and NOT "save()" when working
* with the Table class.
*/
public function change(): void
{
// 添加字段title_2
$table = $this->table('abouts');
$table->addColumn('title_2', 'string', array(
'limit' => 100, 'default' => 'default_title2', 'comment' => '副标题'
))->save();
}
}
运行:php7.2 phinx migrate --dry-run