##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