iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0
Modern Web

Laravel實作 —系列 第 27

[Day 27] Laravel實作 -- 下葬的是希望的seeder,還是我枯竭的屍體

  • 分享至 

  • xImage
  •  

昨天看完了我們前端偉大的table,而今天的內容,你曾經為了測試,新增三百個帳號嗎?或是挑戰資料庫的極限,發表四百篇文章嗎?那你找對地方了!我們要新增seeder,讓我們創建資料庫的時候,就可以新增預設的資料塞進資料庫,馬上開始今天的seeder!

seeder的資料通常會放在database\seeders裡面,我們使用php artisan make:seeder UserSeeder,其中UserSeeder是檔案名稱,可以看需求更換檔案名稱,

<?php
 
namespace Database\Seeders;
 
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
 
class UserSeeder extends Seeder
{
    /**
     * Run the database seeders.
     */
    public function run(): void
    {
        //
    }
}

打開我們的seeder,就會看到這個程式碼,我們要在run()中新增我們會放進資料庫的資料,接著讓我們認識兩種基本的seeder使用方法。

  • 使用database的query builder,例如:
public function run(): void
    {
        DB::table('users')->insert([
            'name' => Str::random(10),
            'email' => Str::random(10).'@gmail.com',
            'password' => Hash::make('password'),
        ]);
    }

使用->insert()插入新資料,或是使用->delete()刪除資料,相關的資料庫指令可以參閱官方文件:https://laravel.com/docs/10.x/queries

  • 使用eloquent model factories,產生大量資料,例如:
public function run(): void
{
    User::factory()
            ->count(50)
            ->hasPosts(1)
            ->create();
}

建立50個user,關於factory的函式則是要進入factory的檔案中新增相關的函式。

我們今天實作是使用前者,使用query builder的方法,我們會示範新增一個使用者做為測試用帳號,首先我們使用artisan的指令,php artisan make:seeder UserSeeder,建立好後開啟檔案,

<?php

namespace Database\Seeders;

use App\Models\User;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Carbon\Carbon;

class UserSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        DB::table('users')->insert([
			'name' => 'John',
			'email_verified_at' => now(),
			'email' => 'John@gmail.com',
			'password' =>  Hash::make('12345678'),
		]);
    }
}

新增一位名字是John的使用者,特別的是now()這個function在最上方的use新增Carbon\Carbon,這是一個關於時間的引入,這個引入在明天的時間判定也會再次和他見面。而Hash:make存入資料庫的時候雜湊,在使用者登入的時候則是使用雜湊前的密碼登入。

接著我們要啟動seeder加入資料進資料庫,我們打開cmd,在預設php artisan db:seed的指令,會執行Database\Seeders\DatabaseSeeder,如果我們要使用其他seeder要在最後加上--class=UserSeeder定義要使用的seeder。如果我們剛好想重置migrattion,我們可以使用php artisan migrate:fresh --seed,使用自製的seeder則是加上--seeder=UserSeeder

seeder可以製作加資料或是測試資料,在程式測試中重要的一環,也會提高開發過程的效率,今天我們實作seeder的建立和執行,而明天我們會介紹關於活動報名期間的判定,那我們明天見掰掰。


上一篇
[Day 26] Laravel實作 -- 波瑟芬妮的秋天
下一篇
[Day 28] Laravel實作 -- 闖進阿鼻讓他們過上守時的生活
系列文
Laravel實作 —30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言