延伸 Part 6 的建立資料表,我們要將空的資料表建立一點資料。

建立會員類別的Seeder

命名方式一般以「Model名稱+複數+TableSeeder」,以大駝峰式命名法。

1
$ php artisan make:seeder MembersCategoryTableSeeder

之前有提到這個資料表預計需要的資料內容如下表,所以我們在做Seeder的時候,不需要很大量的資料去做測試,所以我們用簡單的方式一筆一筆去新增,當然也可以自行到資料庫做手動新增。

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

DB::table('資料表')->insert(),只能單筆單筆去做新增,所以我們要去做5次一樣的事情。

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
40
41
42
43
44
45
46
47
48
49
50
51
<?php

use Illuminate\Database\Seeder;
use Carbon\Carbon;

class MembersCategoryTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('member_categories')->insert(
[
'name' => '一般會員',
'level' => '1',
'created_at' => Carbon::now()
]
);
DB::table('member_categories')->insert(
[
'name' => '銅牌會員',
'level' => '3',
'created_at' => Carbon::now()
]
);
DB::table('member_categories')->insert(
[
'name' => '銀牌會員',
'level' => '5',
'created_at' => Carbon::now()
]
);
DB::table('member_categories')->insert(
[
'name' => '金牌會員',
'level' => '8',
'created_at' => Carbon::now()
]
);
DB::table('member_categories')->insert(
[
'name' => '白金會員',
'level' => '10',
'created_at' => Carbon::now()
]
);
}
}

修改會員資料表的Factory填充值(假資料)

在會員資料表(members)增加了一個欄位,這個欄位為 category(會員權限),他會對應到會員類別資料表(member_categories)的 id,所以我們要在我們之前所做的Factory 新增原料的部分。

range(1,5) 為PHP的函數,範圍值1到5,Arr::random為Laravel提供的,對陣列做一個亂數的產生。

1
'category' => Arr::random(range(1,5))

將上面這段程式碼加入到 MemberFactory.php 的檔案。再產生每筆會員資料,會隨機給予一個權限。

專案 > database > factories > MemberFactory.php

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

/** @var \Illuminate\Database\Eloquent\Factory $factory */

use App\Member;
use Faker\Generator as Faker;
use Illuminate\Support\Str;

$factory->define(Member::class, function (Faker $faker) {

return [
'm_account' => Str::random(10),
'm_password' => md5($faker->password),
'm_name' => $faker->name,
'm_id' => 'M10001',
'm_email' => $faker->unique()->safeEmail,
'm_phone' => $faker->tollFreePhoneNumber,
'category' => Arr::random(range(1,5)),
'created_at' => now()
];
});

設定Seeder執行點的檔案,加入會員類別的填充值

開啟DatabaseSeeder.php 的檔案,加入會員類別的Seeder,我們在下seeder的執行指令時統一管理才可以統一下指令新增假資料。
專案 > database > seeds > DatabaseSeeder.php

加入以下程式碼。

1
$this->call(MembersCategoryTableSeeder::class);

結果如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
$this->call(MembersTableSeeder::class);
$this->call(MembersCategoryTableSeeder::class);
}
}

清除舊資料?新增新資料?

我們要先清除掉資料表的舊資料,再去新增資料。

1
$ php artisan migrate:refresh

DatabaseSeeder.php 有將需要的填充值做一個新增,所以我們只要執行以下指令,就可以將兩個資料表的資料都做新增。

1
$ php artisan db:seed
1
2
3
4
5
Seeding: MembersTableSeeder
Seeded: MembersTableSeeder (0.45 seconds)
Seeding: MembersCategoryTableSeeder
Seeded: MembersCategoryTableSeeder (0.01 seconds)
Database seeding completed successfully.

回頭看一下資料表的資料是否確定新增進去

members

member_categories


結論

其實在做任何的專案,真的需要規劃好各種可能,活用各種方法等,才不會照成後續維護的困難。

標籤: w3HexSchool PHP Laravel