第一次接觸 Yii2.0 的數據庫遷移,感覺挺有意思,一是不用在直接操作數據庫的情況下,很容易的完成自己的對數據庫的操作,而且會同時生成相應的models文件。二是由其在團隊開發的時候,對數據庫數據表操作較爲頻繁的時候,選擇數據庫遷移對以後上線正式數據庫還是比較方便,而且不容易出錯。
這裏分享下 Yii2.0 框架對數據庫遷移的文檔:Yii2.0 數據庫遷移。
文檔中對使用步驟講解的很詳細,我這也不抄一遍了,但也有很多地方是沒有講到的。
在輸入命令(如下)新建表或者其他操作的額時候,出現一個php文件,裏面有兩個函數(如下)。
yii migrate/create create_news_table
<?php
use yii\db\Migration;
class m190320_064222_create_emails extends Migration
{
public function up()
{
}
public function down()
{
echo "m190320_064222_create_emails cannot be reverted.\n";
return false;
}
/*
// Use safeUp/safeDown to run migration code within a transaction
public function safeUp()
{
}
public function safeDown()
{
}
*/
}
下面是我想要表達的內容:
創建數據表:
<?php
use yii\db\Migration;
class m190320_064222_create_emails extends Migration
{
public function up()
{
$tableOptions = null;
if ($this->db->driverName == 'mysql') {
$tableOptions = "CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB";
}
$this->createTable('emails', [
"id" => "int(11) NOT NULL AUTO_INCREMENT COMMENT 'id'",
"user_id" => "int(11) NOT NULL COMMENT '用戶id'",
"name" => "varchar(64) NOT NULL DEFAULT '' COMMENT '名稱'",
"email" => "varchar(64) NOT NULL DEFAULT '' COMMENT '郵箱地址'",
"source" => "varchar(255) NOT NULL DEFAULT '' COMMENT '來源'",
"status" => "tinyint(2) NOT NULL DEFAULT '0' COMMENT '狀態,0默認可用,1不存在,2不可作爲營銷對象'",
"created_at" => "timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP",
"PRIMARY KEY (`id`)",
"UNIQUE KEY `email` (`email`)"
], $tableOptions);
}
public function down()
{
echo "m190320_064222_create_emails cannot be reverted.\n";
$this->dropTable('emails');
return false;
}
/*
// Use safeUp/safeDown to run migration code within a transaction
public function safeUp()
{
}
public function safeDown()
{
}
*/
}
添加字段:
$this->addColumn('emails', 'sended_num', "int(11) NOT NULL COMMENT '發送次數'");
修改字段:
$this->alterColumn('emails', 'sended_num', "int(11) NOT NULL DEFAULT '0' COMMENT '發送次數'");
重命名字段:
$this->renameColumn('emails', 'name', 'new_name');// 最後的一個參數是新名字
刪除字段:
$this->dropColumn('emails', 'sended_num');
添加索引:
刪除索引:
刪除表:
$this->dropTable('emails');
添加主鍵:
$this->addPrimaryKey('primary_name', 'emails', 'name');//第一個參數是主鍵的名字,第二個是表名,第三個是字段名
刪除主鍵:
$this->dropPrimaryKey('primary_name', 'emails');
添加鍵 / 唯一鍵 / 複合鍵:
$this->createIndex('unique_name_email', 'ef_emails', 'name');//主鍵key
$this->createIndex('unique_name_email', 'ef_emails', 'name',true);//唯一主鍵key
$this->createIndex('unique_name_email', 'ef_emails', ['name','email'],true);//複合w唯一主鍵
//unique_name_email主鍵名稱,ef_emails表名,['name','email']複合主鍵,第四個參數是true即是唯一主鍵
刪除鍵:
$this->dropIndex('unique_name_email','ef_emails');
//unique_name_email是索引主鍵名稱,ef_emails是表名
添加外鍵:
$this->addForeignKey('social_account_uid', 'social_account', 'user_id', 'user', 'id');
//以此爲:外鍵名,表名,字段名,關聯表名,關聯字段
持續整理中... ...