NTM Solutions

Bài đăng nổi bật

🚀 Laravel 12 (2026) — Từ PHP Core đến Full Stack📘

Nếu cập nhật theo Laravel 12 LTS (2026) thì mình sẽ chia thành các phần như sau để người học đi từ PHP Core → Laravel → Triển khai dự án th...

Thứ Hai, 13 tháng 7, 2026

🚀 Laravel 12 (2026) — Bài 08 — Seeder trong Laravel 12: Tự động thêm dữ liệu mẫu vào Database

Ở bài trước, chúng ta đã học cách tạo bảng bằng Migration

Tuy nhiên, sau khi tạo xong Database, các bảng vẫn hoàn toàn trống.

Trong quá trình phát triển, việc nhập dữ liệu thủ công bằng phpMyAdmin hoặc viết từng câu lệnh SQL sẽ rất mất thời gian.

Laravel cung cấp Seeder để tự động thêm dữ liệu mẫu (Sample Data) vào cơ sở dữ liệu chỉ với một vài lệnh đơn giản.


Seeder là gì?

Seeder là các lớp PHP dùng để chèn dữ liệu vào Database.

Seeder thường được sử dụng để:

  • Tạo dữ liệu mẫu phục vụ phát triển.

  • Khởi tạo dữ liệu mặc định cho hệ thống.

  • Tạo tài khoản quản trị đầu tiên.

  • Hỗ trợ kiểm thử ứng dụng.

Thay vì nhập từng bản ghi bằng tay, bạn chỉ cần chạy Seeder và Laravel sẽ tự động thêm dữ liệu.


Thư mục Seeder

Tất cả Seeder được lưu trong:

database/
└── seeders/

Ngay khi tạo dự án Laravel, bạn sẽ thấy sẵn file:

DatabaseSeeder.php

Đây là Seeder gốc, có nhiệm vụ gọi các Seeder khác.


Tạo Seeder

Để tạo Seeder mới, sử dụng Artisan:

php artisan make:seeder CategorySeeder

Laravel sẽ tạo:

database/seeders/CategorySeeder.php

Bên trong file sẽ có phương thức:

public function run(): void
{
    //
}

Mọi dữ liệu cần thêm vào Database sẽ được viết trong phương thức run().


Thêm dữ liệu bằng DB Facade

Ví dụ tạo dữ liệu cho bảng categories:

use Illuminate\Support\Facades\DB;

public function run(): void
{
    DB::table('categories')->insert([
        'name' => 'Laravel',
        'created_at' => now(),
        'updated_at' => now(),
    ]);
}

Khi chạy Seeder, Laravel sẽ thêm một bản ghi vào bảng categories.


Thêm nhiều bản ghi

Có thể thêm nhiều dữ liệu cùng lúc:

DB::table('categories')->insert([
    [
        'name' => 'Laravel',
        'created_at' => now(),
        'updated_at' => now(),
    ],
    [
        'name' => 'PHP',
        'created_at' => now(),
        'updated_at' => now(),
    ],
    [
        'name' => 'MySQL',
        'created_at' => now(),
        'updated_at' => now(),
    ],
]);

Cách này nhanh hơn so với việc gọi insert() nhiều lần.


Chạy Seeder

Để chạy một Seeder cụ thể:

php artisan db:seed --class=CategorySeeder

Laravel sẽ thực hiện phương thức run() trong CategorySeeder.

Nếu chạy thành công, dữ liệu sẽ xuất hiện trong bảng categories.


DatabaseSeeder

Thông thường, một dự án có rất nhiều Seeder như:

  • UserSeeder

  • CategorySeeder

  • PostSeeder

  • RoleSeeder

Thay vì chạy từng Seeder, chúng ta đăng ký chúng trong DatabaseSeeder.

Ví dụ:

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

Sau đó chỉ cần chạy:

php artisan db:seed

Laravel sẽ tự động gọi toàn bộ Seeder đã khai báo.


Kết hợp Migration và Seeder

Trong quá trình phát triển, chúng ta thường muốn:

  1. Xóa toàn bộ bảng.

  2. Tạo lại Database.

  3. Thêm dữ liệu mẫu.

Laravel hỗ trợ chỉ với một lệnh:

php artisan migrate:fresh --seed

Lệnh này sẽ:

  • Xóa tất cả bảng.

  • Chạy lại toàn bộ Migration.

  • Chạy DatabaseSeeder.

Đây là lệnh được sử dụng rất thường xuyên trong quá trình phát triển.


Seeder và Faker

Seeder thường được kết hợp với Faker để sinh dữ liệu ngẫu nhiên.

Ví dụ:

  • 100 người dùng.

  • 1.000 bài viết.

  • 500 bình luận.

Trong bài học tiếp theo, chúng ta sẽ tìm hiểu Factory, công cụ giúp tạo dữ liệu giả một cách nhanh chóng và chuyên nghiệp.


Một số lưu ý

  • Không nên sử dụng Seeder để nhập dữ liệu thực tế của khách hàng.

  • Chỉ thêm các dữ liệu mặc định hoặc dữ liệu phục vụ phát triển và kiểm thử.

  • Có thể sử dụng Seeder để tạo tài khoản quản trị mặc định cho dự án.

  • Khi làm việc nhóm, nên đưa Seeder vào hệ thống quản lý mã nguồn để mọi thành viên có cùng dữ liệu khởi tạo.


Tổng kết

Trong bài học này, chúng ta đã tìm hiểu:

  • Seeder là gì.

  • Tạo Seeder bằng Artisan.

  • Thêm dữ liệu bằng DB::table()->insert().

  • Chạy Seeder riêng lẻ.

  • Quản lý nhiều Seeder với DatabaseSeeder.

  • Kết hợp Migration và Seeder bằng php artisan migrate:fresh --seed.

  • Vai trò của Seeder trong phát triển và kiểm thử ứng dụng.

Ở bài tiếp theo, chúng ta sẽ học Factory, sử dụng Faker để tạo hàng trăm hoặc hàng nghìn bản ghi dữ liệu ngẫu nhiên chỉ với vài dòng mã, giúp việc kiểm thử và phát triển ứng dụng trở nên nhanh chóng và hiệu quả hơn.

💡 Gợi ý thực hành sau bài học:

Cho học viên tạo 3 Seeder:

  • CategorySeeder → thêm 5 danh mục.

  • UserSeeder → thêm 1 tài khoản quản trị.

  • PostSeeder → thêm 10 bài viết mẫu.

Sau đó đăng ký cả 3 trong DatabaseSeeder và chạy:

php artisan migrate:fresh --seed

Đây là quy trình mà hầu hết các dự án Laravel thực tế đều sử dụng khi khởi tạo dữ liệu cho môi trường phát triển.

x0

quay về MỤC LỤC

Không có nhận xét nào:

Đăng nhận xét

Facebook Youtube RSS