Yii2.0 數據庫遷移相關操作整理

第一次接觸 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'); 
//以此爲:外鍵名,表名,字段名,關聯表名,關聯字段

持續整理中... ...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章