FakerPHP là gì? Cách tạo 1000 dữ liệu ảo chuẩn cơm mẹ nấu trong Laravel

Mục lục

Hãy tưởng tượng bạn vừa code xong tính năng “Danh sách sản phẩm” có phân trang. Bây giờ bạn cần kiểm tra xem giao diện có bị vỡ khi tên sản phẩm quá dài không, hoặc phân trang có hoạt động đúng khi có 100 sản phẩm không.

Bạn sẽ làm gì?

  1. Vào phpMyAdmin ngồi gõ tay từng dòng? (Mất cả ngày).
  2. Copy paste dữ liệu lung tung kiểu asdfghjkl? (Nhìn rất thiếu chuyên nghiệp).

Giải pháp cho bạn chính là FakerPHP - một thư viện mạnh mẽ được tích hợp sẵn trong Laravel giúp bạn tạo ra dữ liệu giả nhưng nhìn “y như thật”.

1. FakerPHP là gì?

FakerPHP là một thư viện PHP giúp sinh ra dữ liệu ngẫu nhiên theo nhiều chủ đề khác nhau:

Trong Laravel, FakerPHP được kết hợp với tính năng FactorySeeder để bơm dữ liệu vào Database tự động.

2. Bước 1: Tạo Factory (Khuôn mẫu)

Factory giống như một cái máy dập khuôn. Bạn quy định “Sản phẩm này gồm những gì”, và nó sẽ dập ra hàng nghìn cái y hệt cấu trúc đó.

Giả sử bạn có bảng posts (tiêu đề, nội dung, tác giả). Mở terminal và chạy lệnh:

BASH
php artisan make:factory PostFactory
Nhấp để mở rộng và xem thêm

Mở file vừa tạo tại database/factories/PostFactory.php, và chỉnh sửa hàm definition():

PHP
public function definition(): array
{
    return [
        // fake()->sentence(): Tạo một câu ngẫu nhiên làm tiêu đề
        'title' => fake()->sentence(),
        
        // fake()->slug(): Tạo đường dẫn thân thiện từ tiêu đề
        'slug' => fake()->slug(),
        
        // fake()->paragraphs(3, true): Tạo 3 đoạn văn bản làm nội dung
        'content' => fake()->paragraphs(3, true),
        
        // fake()->boolean(): Random true/false
        'is_published' => fake()->boolean(),
        
        // Random số từ 1000 đến 10000
        'view_count' => fake()->numberBetween(1000, 10000),
        
        // Tạo thời gian ngẫu nhiên trong năm nay
        'created_at' => fake()->dateTimeThisYear(),
    ];
}
Nhấp để mở rộng và xem thêm

3. Bước 2: Dùng Seeder để chạy máy dập (Run)

Sau khi có khuôn (Factory), bạn cần một người bấm nút khởi động máy, đó là Seeder.

Mở file database/seeders/DatabaseSeeder.php (file này có sẵn khi cài Laravel).

PHP
public function run(): void
{
    // Tạo 10 User ảo
    \App\Models\User::factory(10)->create();

    // Tạo 50 bài viết ảo
    \App\Models\Post::factory(50)->create();
    
    // Nâng cao: Tạo 10 User, mỗi User có 5 bài viết (Quan hệ HasMany)
    \App\Models\User::factory(10)
        ->hasPosts(5) // Tự động liên kết khóa ngoại user_id
        ->create();
}
Nhấp để mở rộng và xem thêm

Cuối cùng, chạy lệnh thần thánh này ở Terminal:

BASH
php artisan db:seed
Nhấp để mở rộng và xem thêm

Bùm! 💥 Bạn mở Database lên và sẽ thấy hàng trăm dòng dữ liệu được điền đầy đủ, nhìn rất xịn xò.

4. Mẹo nâng cao: Dữ liệu Tiếng Việt

Mặc định Faker sẽ tạo tên tiếng Anh (John, Smith…). Nếu bạn làm web cho người Việt, hãy cấu hình lại để nó sinh ra tên tiếng Việt (Nguyễn Văn A, Trần Thị B…).

Mở file .env, tìm (hoặc thêm) dòng này:

ENV
FAKER_LOCALE=vi_VN
Nhấp để mở rộng và xem thêm

Sau đó chạy lại php artisan db:seed, bạn sẽ thấy dữ liệu toàn là Tiếng Việt rất thân thuộc.

5. Các hàm Faker hay dùng nhất

Đây là bảng cửu chương để bạn tra cứu khi cần fake dữ liệu:

Loại dữ liệuHàm FakerKết quả ví dụ
Họ tênfake()->name()Phạm Minh Tuấn
Emailfake()->unique()->safeEmail()kien@example.net
Số điện thoạifake()->phoneNumber()+84 912 345 678
Địa chỉfake()->address()123 Đường Láng, Hà Nội
Ảnh (URL)fake()->imageUrl(640, 480)https://www.google.com/search?q=https://via.placeholder.com
Văn bản ngắnfake()->text(50)Một đoạn văn ngắn 50 ký tự…
Văn bản dàifake()->realText(500)Văn bản đọc có nghĩa (rất hay)

Kết luận

Sử dụng FakerPHP kết hợp Factory là kỹ năng bắt buộc phải có của một Backend Developer chuyên nghiệp.

Bắt đầu tìm kiếm

Nhập từ khóa để tìm kiếm

↑↓
ESC
⌘K Phím tắt