[Day 10] 通過Migration來建立資料表(一)

通過Migration來建立資料表(一)

資料庫遷移(Migration)

Migration是資料庫結構的版本控制系統,
透過程式碼來定義資料庫的資料表、欄位、索引及鍵值,
開發時可以透過Migration確保資料庫結構異動的順序及完整性,
可以透過指令在幾秒內透過Migration建立一個全新的資料庫系統,
Migration檔案放在database/migrations/目錄下:
https://ithelp.ithome.com.tw/upload/images/20200924/20105694WX0TSOb7Nw.png

Laravel預設會建立三個Migration檔案,
而我們只要留下使用者資料表並修改就可以,
然後按照昨天的規畫將檔案改成以下這樣

<?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->increments('id');
            //姓名
            $table->string('name', 50);
            //帳號
            $table->string('account', 50)->unique();
            //密碼
            $table->string('password', 60);
            //類型
            $table->integer('type')->default(0);
            //性別
            $table->tinyInteger('sex')->default(0);
            //身高
            $table->decimal('height')->default(0);
            //體重
            $table->decimal('weight')->default(0);
            //興趣
            $table->string('interest', 100)->default('');
            //介紹
            $table->string('introduce', 500)->default('');
            //圖片
            $table->string('picture', 50)->default('');
            //啟用
            $table->tinyInteger('enabled')->default(1);
            //創建及修改日期
            $table->timestamps();
        });
    }

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

我們可以看到Migration中會有up()和down()的函數,
up()指的是在執行此次資料庫異動時要執行的動作,
而down()指的是在復原up()所作的資料庫異動,
up()及down()函數中的動作都是相對應的,
我們這個例子migration的目的是建立資料表,
up的目的就是建立users資料表,
down就是刪除資料表,

在up裡面可以看到建立資料表的一些語法

$table->increments('id');

代表要建立一個會自動增加的integer(整數)欄位, 欄位名稱是id

$table->string('account', 50)->unique();

代表要建立一個字串欄位, 欄位名稱名稱是account, 長度為50, 後面的unique代表他是不可重複的索引

$table->integer('type')->default(0);

代表我們要建立一個整數欄位, 欄位名稱名稱是type, 預設值是0

$table->tinyInteger('sex')->default(0);

代表我們要建立一個tinyint(短整數)欄位, 欄位名稱名稱是sex, 預設值是0

$table->decimal('height')->default(0);

代表我們要建立一個decimal(數值)欄位, 欄位名稱名稱是height, 預設值是0

$table->string('interest', 100)->default('');

代表要建立一個字串欄位, 欄位名稱名稱是interest, 長度為100, 預設值是空字串

$table->timestamps();

這行會自動增加兩個欄位:created_at跟updated_at,
這兩個欄位是Laravel的預設欄位,
分別是創建時間與更新時間,
Laravel會自己處理這兩個欄位,
不用特別寫在程式中,
通常只有在讀取資料的時候才會用到.