今天來實際操作一下 migration、說明 migration 的操作概念,以及 table plus 工具的使用。
專案啟動後,首先要去設置 .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 檔案有更動,記得下 php artisan 指令更新
php artisan config:cache
在 terminal 中使用 php artisan 建立 migration 檔案
php artisan make:migration create_groups_table
這裡的檔案名稱是動作名稱,例如:
建立 groups table
建立 products table
增加一個欄位在 groups table 中
修改一個欄位在 products table
建立好後就可以到 database/migrations/
裡面找到 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 分成兩個區塊,
而分析其中的結構,會有 schema 方法、以及欄位設定
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 |
$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 工具)我留下 Laravel 啟用時的兩個 user migration檔案,自己新增了三個 migration 檔案
// terminal 指令
php artisan migrate
初次跑 migrate,會詢問是否建立 database
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 教學~