Ở 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:
Xóa toàn bộ bảng.
Tạo lại Database.
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




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