##PHP Migrations——Doctrine Migrations教程php
博文连接 : http://my.oschina.net/u/930926/blog/741477git
版权声明:本文为博主原创文章,未经博主容许不得转载。github
Doctrine Migrations github地址:https://github.com/doctrine/migrationssql
不知道Migrations有什么用,可参考这篇文章:为何要用PHP Migrations数据库
官方文档Getting Started(快速开始)写得很是很差,用CodeIgniter集成Migrations代码,作了快速演示Demo,能够先把代码跑起来,再看搭建笔记。app
本教程须要使用Composer,既然是趋势就早日拥抱,能写PHP的这点工具用不来讲不过去
若是对Composer还不了解,请参考 Composer中文网composer
application/config/database_config.php
配置文件composer update
php migrations.php
,命令说明参考搭建笔记的测试命令用CodeIgniter 3.x来举例集成Doctrine Migrations函数
若是对Composer还不了解,请参考 Composer中文网工具
composer require doctrine/migrations composer require symfony/console:~2.5
symfony/console最新的3.x版本已经弃用了Symfony\Component\Console\Helper\HelperSet,因此要指定安装symfony/console:~2.5版本测试
列举全部命令
php migrations.php
建立Migrations脚本文件
sh gen.sh 或 php migrations.php migrations:generate
在新建立的php文件,添加数据库sql语句 文件中自动建立了
up
和 down
两个方法
up
方法是执行Migrations脚本自动执行的函数
down
方法是执行Migrations脚本up函数出错后,回滚执行的函数
在两个方法加入sql,具体能够参考官方的文档,也能够用ORM来编写
执行Migrations脚本文件
sh mig.sh 或 php migrations.php migrations:migrate
由于 config/migrantions.yml
定义 migration_versions
表记录执行过Migrations文件,因此migrations:migrate
命令会检查migration_versions表,判断哪些Migrations文件没执行,再执行。
经常使用2个命令:php migrations.php migrations:generate
和 php migrations.php migrations:migrate
,但是有没有以为这两个命令好长,写两个sh文件来简化命令,因此在migration目录有mig.sh和gen.sh文件,使用sh gen.sh
和 sh mig.sh
,就简单不少了。
mig.sh
#!/bin/sh cd $(cd `dirname $0`;pwd) # 切换到当前目录 php migrations.php migrations:migrate
gen.sh
#!/bin/sh cd $(cd `dirname $0`;pwd) # 切换到当前目录 php migrations.php migrations:generate
sh脚本文件最好用vi编写或者保存unix编码,否则会报如下错误:
[Symfony\Component\Console\Exception\CommandNotFoundException] " is not defined. Did you mean one of these? migrations:migrate migrations:status migrations:execute migrations:generate migrations:version migrations:diff
能够用dos2unix mig.sh
命令转换文件编码
没有dos2unix
命令,能够 sudo apt-get install dos2unix
安装
最后,感受这样的搭建方式仍是有点繁琐,有兴趣的同窗能够尝试用PHAR文件,再用sh脚本封装一下或许简单不少。
如有哪里不清楚,能够参考github上的代码,也能够留言。
https://github.com/lyaohe/ci-migration
参考资料
Doctrine Migrations文档: http://docs.doctrine-project.org/projects/doctrine-migrations/en/latest/
Doctrine DBAL and Migrations Example: https://gist.github.com/lyaohe/7a6eedd95ebafd6588799e01e87b978b