關於Yii2的數據遷移,與laravel等其餘框架同樣,在開發和維護一個數據庫驅動的應用程序時,數據庫的結構會隨代碼的改變而改變。例如,在開發應用程序的過程當中,會增長一張新表且必須得加進來; 在應用程序被部署到生產環境後,須要創建一個索引來提升查詢的性能等等。 由於一個數據庫結構發生改變的時候源代碼也常常會須要作出改變,Yii 提供了一個 數據庫遷移 功能,該功能能夠記錄數據庫的變化, 以便使數據庫和源代碼一塊兒受版本控制。php
這裏分享Yii2.0框架數據庫遷移的使用,控制檯如何使用migrate命令。
一、默認遷移文件
全部建立的遷移文件都被統一放在 console/migrations 文件夾裏,打開後能夠看到默認的相似m200311_020625_user.php(這裏舉例表名爲user)的php文件。能夠看到在該文件裏面定義了一個 m200311_020625_user類,並繼承自 Migration 基類。m200311_020625_user 有兩個方法 up 和 down :laravel
當咱們運行遷移時,up 方法會被調用;
當咱們回滾遷移時,down 方法會被調用數據庫
二、建立遷移(注意yii命令在框架根目錄)框架
yii migrate/create <name>yii
好比:ide
yii migrate/create create_news_tablepost
那麼遷移目錄中會多出一個相似m200311_020625_create_news_table.php的文件,文件代碼以下:性能
<?phpthis
use yii\db\Migration;編碼
class m150101_185401_create_news_table extends Migration
{
public function up()
{} public function down() { echo "m101129_185401_create_news_table cannot be reverted.\n"; return false; }
每一個數據庫遷移都會被定義爲一個繼承自 yii\db\Migration 的 PHP 類。
類的名稱按照 m<YYMMDDHHMMSS><Name> 的格式自動生成,其中
<YYMMDDHHMMSS> 指執行建立遷移命令的 UTC 時間。
<Name> 和你執行命令時所帶的 name 參數值相同。
三、遷移文件的詳細編碼示範:
在遷移類當中,你應當在 up() 方法中編寫改變數據庫結構的代碼。 你可能還須要在 down() 方法中編寫代碼來恢復由 up() 方法所作的改變。 當你經過 migration 升級數據庫時, up() 方法將會被調用,反之, down() 將會被調用。 以下代碼展現瞭如何經過遷移類來建立一張 news 表:
use yii\db\Schema;
use yii\db\Migration;class m150101_185401_create_news_table extends \yii\db\Migration
{
public function up()
{
$this->createTable('news', [
'id' => Schema::TYPE_PK,
'title' => Schema::TYPE_STRING . ' NOT NULL',
'content' => Schema::TYPE_TEXT,
]);
}public function down() { $this->dropTable('news'); }}
四、生成遷移
yii migrate/create create_post
利用 --fields 選項指定字段參數,能夠當即建立字段以下:
yii migrate/create create_post --fields="title:string,body:text"
生成的遷移以下:
/**
Handles the creation for table
post
.
*/
class m150811_220037_create_post extends Migration
{
/**
- @inheritdoc
*/
public function up()
{
$this->createTable('post', [
'id' => $this->primaryKey(),
'title' => $this->string(),
'body' => $this->text(),
]);
}/**
- @inheritdoc
*/
public function down()
{
$this->dropTable('post');
}
}
五、提交遷移
yii migrate 或yii migrate/up
若是你肯定你須要提交這些遷移, 它將會按照類名當中的時間戳的順序,一個接着一個的運行每一個新的遷移類裏面的 up() 或者是 safeUp() 方法
按照以下格式使用 migrate/to 命令 來指定數據庫應該提交哪個遷移:
yii migrate/to m150101_185401_create_news_table
六、回滾遷移
yii migrate/down
本文參考了Yii框架官方文檔