iT邦幫忙

2023 iThome 鐵人賽

DAY 11
0

今天來實際操作一下 migration、說明 migration 的操作概念,以及 table plus 工具的使用。
https://ithelp.ithome.com.tw/upload/images/20230925/20162893pysPyb2STf.png

檢查 .env 檔案正確性

專案啟動後,首先要去設置 .env 檔案

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=shoppingCart       // Laravel 9.X版之後可自己建立資料庫
DB_USERNAME=shop123            // 不確定的話記得進 database 確認
DB_PASSWORD=shop123            // 不確定的話記得進 database 確認

菜鳥狀況題:我發現 .env 內容寫錯、修改後 migration 還是錯誤

如果 .env 檔案有更動,記得下 php artisan 指令更新

php artisan config:cache

建立 migration

在 terminal 中使用 php artisan 建立 migration 檔案

php artisan make:migration create_groups_table

這裡的檔案名稱是動作名稱,例如:

建立 groups table

建立 products table

增加一個欄位在 groups table 中

修改一個欄位在 products table

建立好後就可以到 database/migrations/ 裡面找到 migration 檔案。

https://ithelp.ithome.com.tw/upload/images/20230925/20162893TfIMQmCV7G.png

撰寫 migration

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('groups', function (Blueprint $table) {
            $table->id();
            $table->string('group_name', 50)->comment('團購名稱');
            $table->unsignedBigInteger('organizer_id')->comment('發起人ID');
            $table->decimal('close_price', 9, 2)->nullable()->comment('截單金額');
            $table->date('close_date')->nullable()->comment('截單時間');
            $table->boolean('allow_insert_product')->comment('開放自行新增選項');
            $table->integer('status')->comment('團購狀態');
            $table->timestamps();
        });
    }

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

migration 分成兩個區塊,

  • up():新增 users table|新增 A 欄位|修改 B 欄位為 nullable
  • down():刪除 users table|刪除 A 欄位|取消 B欄位為 nullable

https://ithelp.ithome.com.tw/upload/images/20230925/20162893JL29oI14UT.png

而分析其中的結構,會有 schema 方法、以及欄位設定

https://ithelp.ithome.com.tw/upload/images/20230925/20162893WMuMxbQb8j.png

schema 方法可以解釋成要對 table 做什麼事情,欄位設定則是單個欄位的限制與設定。

上圖中我用 Schema::Create() 建立一張 groups table,table 中包含下列欄位:

欄位名稱 欄位型別 可否為 null comment 備註
id id
group_name string 團購名稱
organizer_id unsignedBigInteger 發起人 ID
close_price decimal(9,2) nullable 截單金額
close_date date nullable 截單時間
allow_insert_product boolean 開放自行新增選項
status integer 團購狀態
created_at
updated_at timestamps

實作專案後才學到的一些欄位設定

  • 「每個團購由一個 user 發起」,organizer_id 就是屬於哪個 user 的 ID。
    table 都會有個 primary key,Laravel 預設為 $table→id(),從 table plus 來看這個欄位會變成 unsignedBigInteger 型別,因此 organizer_id 會等於 user_id 的情況下,就會設定欄位型別為unsignedBigInteger
  • $table→timestamps() 會產生 created_at、updated_at 兩個欄位,通常都會保留備用。
    $table→softdelete() 則會產生 deleted_at 欄位,紀錄刪除時間。
  • comment() 會在 Table Pluse 查看表格結構時會顯示欄位名稱,當表格數量、欄位數量多時,對於自己跟協作的人都很方便!(用下面教的 table plus 工具)

https://ithelp.ithome.com.tw/upload/images/20230925/20162893DprUTvAFjB.png

執行 migration

我留下 Laravel 啟用時的兩個 user migration檔案,自己新增了三個 migration 檔案

// terminal 指令
php artisan migrate

初次跑 migrate,會詢問是否建立 database

https://ithelp.ithome.com.tw/upload/images/20230925/20162893dZKoTPGZX9.png

INFO  Preparing database.
  Creating migration table .................................... 126ms DONE
  // 建立 "migration" table

INFO  Running migrations.
  2014_10_12_000000_create_users_table ........................ 327ms DONE
  2019_12_14_000001_create_personal_access_tokens_table ....... 526ms DONE
	  // 下面三個是剛剛新增的 migration 檔案
  2023_08_14_025534_**create_groups_table** ................... 86ms DONE
  2023_08_14_030552_**create_products_table** ................. 102ms DONE
  2023_08_17_043044_**create_product_user_table** ............. 98ms DONE

寫到這裡發現字數已經太多(需要留點版面當庫存XD)
明天再接續 Table Plus 教學~


上一篇
Laravel 如何與 Database 互動
下一篇
Migration & Table Plus 工具 (2)
系列文
Laravel 後端菜鳥可以知道的流程概念30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言