1.Doctrine Migrations是什么?
团队开发中,每个开发人员对于数据库都修改都必须手动记录,上线时需要人工整理,运维成本极高。而且在多个开发者之间数据结构同步也是很大的问题。Doctrine Migrations
组件把数据库变更加入到代码中和代码一起进行版本管理,很好的解决了上述问题。
实际作用:
版本管理:把数据库变更写入到代码中,来进行版本管理
数据库同步:可以执行对应的文件创建数据表结构
总结:用代码来对数据库进行操作。
2.如何集成使用
1.下载依赖:
使用composer 工具下载对应的依赖,确保composer下载的版本与自己php版本一致。
执行命令: composer require doctrine/migrations ^1.5
本例使用php5.6,因此指定了版本1.5,也可以不指定版本下载,会自动适配对应版本下载对应依赖。
^1.5 ~1.5 1.5 三个的区别。、
1) ^1.5 是小版本更新,假设1.5的最新版本为1.5.2的,那么重新安装依赖时会下载该小版本的最新版本,即1.5.2
2) ~1.5是大版本更新,如果最新为1.6,那么重新下载依赖时会下载1.6版本的
3) 1.5 则为指定1.5版本下载,不会随外界版本更新而更新所下载的依赖版本
2.配置文件
1)在项目根目录中创建db目录,db目录下创建migrations目录及main.php入口文件,并给予可执行权限。
2)修改main.php,写入一下内容:
#!/usr/bin/env php
<?php
require_once '../vendor/autoload.php';
use Doctrine\DBAL\DBALException;
use Doctrine\DBAL\DriverManager;
use Doctrine\DBAL\Migrations\Configuration\Configuration;
use Doctrine\DBAL\Migrations\Tools\Console\ConsoleRunner;
use Doctrine\DBAL\Migrations\Tools\Console\Helper\ConfigurationHelper;
use Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper;
use Symfony\Component\Console\Helper\HelperSet;
use Symfony\Component\Console\Helper\QuestionHelper;//运行方式为db目录下./main.php 接以下参数
//migrations:execute Execute a single migration version up or down manually.
//migrations:generate Generate a blank migration class.
//migrations:latest Outputs the latest version number
//migrations:migrate Execute a migration to a specified version or the latest available version.
// --dry-run是空转参数,只显示操作结果,不执行修改
// --write-sql=file.sql 不执行操作,只写入文件,对于生产环境需要手动验证并执行的场景有用
//migrations:status View the status of a set of migrations.
//migrations:up-to-date Tells you if your schema is up-to-date.
//migrations:version Manually add and delete migration versions from the version table.// 此处配置 假设配置文件pdo.php在 根目录/config/default/pdo.php 数据库名为test
return ['db' => ['database_name' => 'test','xxx'=> 'xxx','xxx'=> 'xxx' ]
];
$config = '配置文件模块名'; // default
$folder = '配置文件文件夹名'; //test
$db = '数据库文件对应数据库名'; //db// 读取数据库配置信息
$configFile = __DIR__ ."/../config/{$config}/pdo.php";
if (!file_exists($configFile)) {echo '配置不存在' . PHP_EOL;exit;
}
$dbConfig = include $configFile;// 创建放置版本文件的文件夹
$migrationFolder = __DIR__ ."/migrations/{$folder}";
if (!is_dir($migrationFolder)){if (!mkdir($migrationFolder)){echo "文件夹生成失败,请手动生成[$migrationFolder]" . PHP_EOL;exit;}
}// 数据库映射
$config = $dbConfig[$db];//对应数据库连接信息字段,字符串要确保一致,避免乱码
$dbParams = ['driver' => 'pdo_mysql','host' => $config['master'],'port' => $config['port'],'dbname' => $config['database_name'],'user' => $config['username'],'password' => $config['password'],'charset'=> 'UTF8'
];try {$connection = DriverManager::getConnection($dbParams);
} catch (DBALException $e) {echo $e->getMessage() . PHP_EOL;exit;
}// 迁移组件配置
$configuration = new Configuration($connection);
$configuration->setName('Doctrine Migrations');
$configuration->setMigrationsNamespace('migrations\udb_center');
$configuration->setMigrationsTableName('migration_versions');
$configuration->setMigrationsDirectory('migrations/udb_center');
// 创建命令脚本
$helper_set = new HelperSet(['question' => new QuestionHelper(),'db' => new ConnectionHelper($connection),new ConfigurationHelper($connection, $configuration),
]);
$cli = ConsoleRunner::createApplication($helper_set);
try {$cli->run();
} catch (Exception $e) {echo $e->getMessage() . PHP_EOL;
}
3.如何使用
常用命令如下:
//migrations:generate Generate a blank migration class.
//migrations:migrate Execute a migration to a specified version or the latest available version.
//migrations:execute Execute a single migration version up or down manually.
//migrations:latest Outputs the latest version number
// --dry-run是空转参数,只显示操作结果,不执行修改
// --write-sql=file.sql 不执行操作,只写入文件,对于生产环境需要手动验证并执行的场景有用
//migrations:status View the status of a set of migrations.
//migrations:up-to-date Tells you if your schema is up-to-date.
//migrations:version Manually add and delete migration versions from the version table.
本文参考自:
https://www.cnblogs.com/tbphp/p/9158719.html