資料庫遷移 :理解

cangsongbayu發表於2020-01-09

資料庫遷移 ,聽起來有點抽象 ,沒接觸過的人只聽名字可能不太明白是做什麼的 。先簡單理解 :遷移指的是通過程式設計的方式建立應用程式的資料庫結構( 就是用程式碼來對資料庫中的表 、欄位 、索引等物件進行增刪改查 )

使用 Artisan 命令建立遷移 :

php artisan make:migration create_users_table

新建的遷移檔案在 database/migrations/ 路徑下 ,檔名大概是下面這個樣子 :

2014_10_12_000000_create_users_table.php

遷移檔案的結構如下

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('users');
    }
}

有兩個方法 up() 和 down() ,下面是對這兩個方法的說明

方法 說明
up() 這個方法中的內容應該是對資料庫中的物件( 表 、欄位 、索引等 )進行增刪改查等操作
down() 這個方法執行的操作應該與 up() 方法相反

建立表

/**
 * Schema::create() 方法可以建立表
 * @param $table 表的名稱
 * @param @callback 閉包 ,在其中對錶進行各種操作
 */
Schema::create('tablename', function(Blueprint $table){
    // 設定表使用的儲存引擎
    $table->engine = 'InnoDB';
    // 設定表使用的字元編碼
    $table->collation = 'utf8';
    // 設定表的排序規則
    $table->collation = 'utf8_unicode_ci';
    // 建立臨時表
    $table->temporary();
    // 設定表的註釋 ,需要外掛( composer require zedisdog/laravel-schema-extend )
    $this->comment = '表的註釋資訊';
    // 設定表的註釋 ,不需要外掛
    \DB::statement("ALTER TABLE `users` comment '表的註釋資訊'");
});

刪除表

public function down()
{
    // 刪除表
    Schema::drop('users');
    // 如果表存在才刪除表
    Schema::dropIfExists('users');
}

修改表

public function up()
{
    // 修改表名稱
    Schema::rename('old_table_name', 'new_table_name');
}

增加欄位

public function up()
{
    Schema::table('users', function(Blueprint $table){
        // 增加一個 VARCHAR(84) 型別的欄位
        $table->string('name', 84);
    });
}

刪除欄位

public function down()
{
    Schema::table('users', function(Blueprint $table)){
        // 刪除 name 欄位
        $table->dropColumn('name');
    });
}

修改欄位

public function up()
{
    // 將 old_column_name 欄位重新命名為 new_column_name
    Schema::renameColumn('old_column_name', 'new_column_name');
}

php artisan migrate :執行所有的遷移

遷移檔名稱中的時間欄位

下面是一個遷移檔案的名稱 ,其中的 2014_10_12_000000 是遷移檔案的建立時間

2014_10_12_000000_create_users_table.php

遷移在執行時 ,是按照時間順序執行的 ,up() 命令會抓取最早日期的遷移作為第一個執行 ,然後依次執行後面日期的遷移檔案

建立遷移的選項

下面的命令用來建立遷移

php artisan make:migration create_users_table

有兩個可用的選項

選項 說明
--create 建立指定名稱的表進行遷移
# 建立一個名為 user_table 的表進行遷移
php artisan make:migration create_user_table
# 建立一個名為 abc 的表進行遷移
php artisan make:migration create_user_table --create=abc

# 相同的名稱的遷移檔案不能重複建立 ,這裡是為了方便理解
選項 說明
--table 這個選項的意思我還不太明白

歡迎糾錯 、建議

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章