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ứ Tư, 15 tháng 7, 2026

🚀 Laravel 12 (2026) — Bài 09 — Factory : Tạo dữ liệu giả bằng Faker

Ở bài trước, chúng ta đã học cách sử dụng Seeder để thêm dữ liệu mẫu vào Database. 

Tuy nhiên, nếu cần tạo hàng trăm hoặc hàng nghìn bản ghi thì việc tự viết từng dữ liệu sẽ rất mất thời gian.

Laravel cung cấp Factory kết hợp với Faker để sinh dữ liệu giả (Fake Data) một cách tự động. 

Đây là công cụ được sử dụng rất phổ biến trong quá trình phát triển và kiểm thử ứng dụng.


Factory là gì?

Factory là lớp dùng để định nghĩa cách tạo dữ liệu mẫu cho một Model.

Thay vì tự nhập:

  • 100 người dùng

  • 500 bài viết

  • 2.000 bình luận

chúng ta chỉ cần yêu cầu Factory tạo dữ liệu và Laravel sẽ tự động sinh các bản ghi với thông tin ngẫu nhiên.


Faker là gì?

Faker là thư viện được Laravel tích hợp sẵn để tạo dữ liệu giả.

Ví dụ Faker có thể sinh:

  • Họ tên

  • Email

  • Địa chỉ

  • Số điện thoại

  • Ngày tháng

  • Văn bản ngẫu nhiên

  • Hình ảnh (URL)

  • Số tiền

  • Và nhiều loại dữ liệu khác

Nhờ Faker, dữ liệu mẫu trông giống dữ liệu thật hơn, giúp việc kiểm thử trở nên hiệu quả.


Tạo Factory

Laravel hỗ trợ tạo Factory bằng Artisan:

php artisan make:factory PostFactory

Nếu đã có Model, bạn nên tạo Factory cùng với Model:

php artisan make:model Post -mf

Tùy chọn:

  • -m: tạo Migration.

  • -f: tạo Factory.

Laravel sẽ tạo file:

database/
└── factories/
    └── PostFactory.php

Định nghĩa dữ liệu mẫu

Ví dụ:

public function definition(): array
{
    return [
        'title' => fake()->sentence(),
        'content' => fake()->paragraph(),
    ];
}

Trong đó:

  • sentence() tạo tiêu đề ngẫu nhiên.

  • paragraph() tạo đoạn văn bản.

  • fake() là đối tượng Faker được Laravel cung cấp.


Một số hàm Faker thường dùng

Tên:

fake()->name()

Email:

fake()->email()

Tên người dùng:

fake()->userName()

Địa chỉ:

fake()->address()

Số điện thoại:

fake()->phoneNumber()

Tiêu đề:

fake()->sentence()

Đoạn văn:

fake()->paragraph()

Nhiều đoạn văn:

fake()->paragraphs(3, true)

Số ngẫu nhiên:

fake()->numberBetween(1,100)

Ngày:

fake()->date()

Boolean:

fake()->boolean()

Những hàm này đáp ứng hầu hết nhu cầu tạo dữ liệu mẫu trong quá trình phát triển.


Tạo dữ liệu bằng Factory

Sau khi định nghĩa Factory, có thể tạo dữ liệu bằng Seeder:

Post::factory()->count(20)->create();

Laravel sẽ tự động tạo 20 bài viết và lưu vào Database.

Có thể tạo nhiều hơn:

User::factory()->count(100)->create();

Hoặc:

Category::factory()->count(10)->create();

Kết hợp với DatabaseSeeder

Ví dụ:

public function run(): void
{
    User::factory()->count(10)->create();

    Category::factory()->count(5)->create();

    Post::factory()->count(50)->create();
}

Sau đó chạy:

php artisan migrate:fresh --seed

Laravel sẽ:

  • Tạo lại Database.

  • Chạy Migration.

  • Sinh toàn bộ dữ liệu mẫu.

Đây là quy trình rất phổ biến trong các dự án thực tế.


Factory và Relationship

Factory còn có thể tạo dữ liệu liên kết.

Ví dụ:

Post::factory()
    ->count(30)
    ->for(User::factory())
    ->create();

Laravel sẽ:

  • Tạo User.

  • Tạo 30 bài viết.

  • Tự động gán user_id.

Sau này khi học Relationship, chúng ta sẽ khai thác tính năng này nhiều hơn.


Factory Sequence

Đôi khi cần tạo dữ liệu theo thứ tự thay vì hoàn toàn ngẫu nhiên.

Ví dụ:

User::factory()
    ->count(3)
    ->sequence(
        ['role' => 'Admin'],
        ['role' => 'Editor'],
        ['role' => 'User']
    )
    ->create();

Factory sẽ lần lượt tạo các vai trò theo đúng thứ tự đã khai báo.


Một số lưu ý

  • Factory chỉ nên dùng để tạo dữ liệu phục vụ phát triển và kiểm thử.

  • Không sử dụng dữ liệu giả trên hệ thống đang vận hành thực tế.

  • Có thể kết hợp Factory với Seeder để khởi tạo dữ liệu nhanh chóng.

  • Nên định nghĩa Factory cho các Model chính như User, Category, Post và Comment.


Tổng kết

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

  • Factory là gì.

  • Faker là gì.

  • Tạo Factory bằng Artisan.

  • Định nghĩa dữ liệu mẫu.

  • Các hàm Faker phổ biến.

  • Sinh dữ liệu bằng Factory.

  • Kết hợp Factory với Seeder.

  • Tạo dữ liệu có quan hệ giữa các Model.

  • Sử dụng Sequence để tạo dữ liệu theo thứ tự.

Đến đây, chúng ta đã hoàn thành phần Database của khóa học.

Ở bài tiếp theo, chúng ta sẽ bước sang phần Eloquent ORM, tìm hiểu về Model, cách Laravel làm việc với bảng dữ liệu và cách thao tác với cơ sở dữ liệu theo phong cách hướng đối tượng thay vì viết các câu lệnh SQL thủ công.

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

Tạo dữ liệu mẫu cho dự án Blog:

  • 10 người dùng (User)

  • 5 danh mục (Category)

  • 100 bài viết (Post)

  • Mỗi bài viết được gán ngẫu nhiên cho một người dùng và một danh mục.

Sau đó chạy:

php artisan migrate:fresh --seed

Khi hoàn thành, học viên sẽ có một cơ sở dữ liệu đầy đủ dữ liệu mẫu để tiếp tục học Eloquent ORM, CRUD và Relationship mà không cần nhập dữ liệu thủ công.

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

Đăng nhận xét

Facebook Youtube RSS