Skip to content

Seeding

Giới thiệu (Introduction)

Laravel bao gồm khả năng seed (gieo hạt) database của bạn với dữ liệu test bằng seed classes. Tất cả seed classes nằm trong database/seeders. Mặc định, DatabaseSeeder class được định nghĩa sẵn — từ class này bạn gọi các seeders khác.

Viết Seeders (Writing Seeders)

bash
php artisan make:seeder UserSeeder
php
<?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
{
    public function run(): void
    {
        DB::table('users')->insert([
            'name' => Str::random(10),
            'email' => Str::random(10) . '@example.com',
            'password' => Hash::make('password'),
        ]);
    }
}

Sử dụng Model Factories

Tạo data lượng lớn:

php
use App\Models\User;

public function run(): void
{
    User::factory()
        ->count(50)
        ->hasPosts(1)
        ->create();
}

Gọi Seeders khác

php
public function run(): void
{
    $this->call([
        UserSeeder::class,
        PostSeeder::class,
        CommentSeeder::class,
    ]);
}

Tắt Model Events

php
use App\Models\User;

public function run(): void
{
    User::withoutEvents(function () {
        User::factory()->count(50)->create();
    });
}

Chạy Seeders (Running Seeders)

bash
# Chạy DatabaseSeeder (mặc định)
php artisan db:seed

# Chạy seeder cụ thể
php artisan db:seed --class=UserSeeder

# Fresh migrate + seed
php artisan migrate:fresh --seed

# Force seed trong production
php artisan db:seed --force

Kết hợp với migration:

bash
php artisan migrate --seed
php artisan migrate:refresh --seed