在 Part 6的文章裡,只有新增會員的資料表,但我們要新增一個資料表讓會員可以分層級做個區別,之後可以跟會員資料表(members)做一個關聯。

  • 新增會員類別資料表
  • 會員資料表多一個會員類別欄位

新增會員類別

migration 在Part 6有提過,但是這章節會特別介紹擴充資料表欄位的部分。

建立會員類別 migration

使用 artisan 指令建立 Modelmigration ,由於之後可能會用到model的部分,所以一併建立。
命名規則:單字字首大寫,不加上複數。

※ Model 在之後的章節會做介紹。

1
2
3
4
5
$ php artisan make:model MemberCategory -m

or

$ php artisan make:model MemberCategory --migration

執行以上指令檔案建立在
專案 > database > migrations > 2020_07_02_113816_create_member_categories_table.php

資料表欄位設計,設計會員類別所以的欄位。

英文名稱 中文名稱 資料庫型態 鍵值
id 編號 int Primary Key
name 會員等級 varchar(20)
level 會員倍率 int(11)
create_at 建立時間 datetime
update_at 更新時間 datetime

開啟 2020_07_02_113816_create_member_categories_table.php,將所需欄位轉換為 migration

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php

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

class CreateMemberCategoriesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('member_categories', function (Blueprint $table) {
// 設定儲存引擎類型。 預設:InnoDB
$table->engine = 'MyISAM';
// 編號
$table->Increments('id');
// 會員等級
$table->string('name',20)->nullable();
// 會員倍率
$table->integer('level')->nullable();
// 建立時間、更新時間
$table->timestamps();
});
}

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

預計規劃的欄位資料

id name level create_at update_at
1 一般會員 1
2 銅牌會員 3
3 銀牌會員 5
4 金牌會員 8
5 白金會員 10

會員資料新增會員類別欄位

之前有提到在建立 migration 的時候,會記錄日期時間,所以我們可以知道說在什麼時間做了欄位的調整,但由於我們在做會員資料表(members)的時候,沒有考慮到會員類別,所以我們要在下面另外建立新的 migration

新增資料庫遷移(migration)

  • 資料表使用英文複數(s、es)
  • 資料表用字母小寫,單字間用蛇底式命名(Snake Case)

使用 artisan 指令建立 migration

我們在下指令的時候,會以大駝峰式命名做命名。

1
$ php artisan make:migration AddCategoryToMembers --table="members"

指令建立後的檔案名稱,會自動以小蛇形式命名

開啟 2020_07_02_115745_add_category_to_members.php,class名稱會以我們當初用指令建立的命名。

專案 > database > migrations > 2020_07_02_115745_add_category_to_members.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php

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

class AddCategoryToMembers extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('members', function (Blueprint $table) {
//
});
}

/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('members', function (Blueprint $table) {
//
});
}
}

增加會員資料表(members)欄位

英文名稱 中文名稱 資料庫型態 預設值
category 會員權限 int 預設值1為基本會員

將上面要增加的欄位轉換為 migration
※ 將註解刪除,以免程式碼拉太長。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php

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

class AddCategoryToMembers extends Migration
{

public function up()
{
Schema::table('members', function (Blueprint $table) {
$table->integer('category')->default(1)->comment('會員權限');
});
}

public function down()
{
Schema::table('members', function (Blueprint $table) {
$table->dropColumn('category');
});
}
}

建立資料表

終端機(cli)輸入以下指令:

會執行 public function up() 方法來新增資料表。

1
$ php artisan migrate

查看資料庫的資料表
1、會員類別資料表(member_categories)

確認欄位及型態列的是否正確。

2、會員資料表(members)增加欄位 category

確認欄位建立正確。

有關修改的操作可詳見 修改資料表新建 migration

結論

在規劃資料表的時候,要把各種狀況想清楚,這樣開發的時候會減少一些不要的麻煩。

標籤: w3HexSchool PHP Laravel