Factory là thư viện để tạo ra các dữ liệu mẫu 1 cách tự động và nhanh chóng. factory làm việc kết hợp với model và các thành phần seeder và migrate trong laravel tạo thành 1 bộ công cụ hữu ích cho các nhà phát triển backend. Trong bài viết này tôi sẽ hướng dẫn chi tiết cách sử dụng công cụ factory này.
Để thực hiện được factory dữ liệu chúng ta cần tạo migrations trước để tạo ra bảng dữ liệu. Trong bài hướng dẫn này tôi sử dụng bảng users để factory dữ liệu nên tôi không caanfh tạo migrations nữa, vì bảng users mặc định khi cài đặt thì laravel đã tự động tạo cho chúng ta, tuy nhiên thì các trường dữ liệu chúng ta cần thêm vào cho đầy đủ. Chúng ta tiến hành thêm cột avatar và cột slug như sau.
mở file migrations của bạn trong thư mục database/migrations sửa đoạn code như hình dưới
Sau đó chúng ta chạy lệnh sau để tạo bảng dữ liệu
php artisan migrate
Nếu như bạn đã chạy lệnh migrate trước đó thì bạn có thể chạy lệnh sau để reset lại bảng dữ liệu
php artisan migrate:refresh
Nếu chạy thành công thì ta sẽ thấy thông báo như sau ở terninal
Chúng ta có thể kiểm tra kết qua trong database
Như vậy tôi đã tạo được bảng dữ liệu users đồng thời thêm 2 cột là avatar và slug. Trong thực tế các dự án thì chúng ta cũng có thể sẽ gặp trường hợp cần thêm nhiều trường dữ liệu khác nữa thì chúng ta cũng thực hiện tương tự như thêm 2 trường này.
Để tạo factory ta chạy lệnh sau
php artisan make:factory nameFactory
Ở đây tôi có một lưu ý dành cho bạn là tên của factory bắt buộc phải có Factory ở phía sau như trong câu lệnh trên, nếu như bạn để mỗi name thì lệnh chạy sẽ bị lỗi. Trong trường hợp này tôi đang thao tác với bản users nên laravel đã tạo sẵn cho tôi file factory rồi nên không phải tạo nữa, sau này cần thực hiện với các bảng dữ liệu khác thì bạn cần phải tự tạo ra file này bằng câu lệnh ở trên.
Bạn vào database/factories và mở file facory của mình lên. ở hình trên laravel đã tự tạo sẵn cho chúng ta các trường cơ bản. bây giờ cùng ta thêm trường avatar và trường slug như sau
Ở trên tôi đã khai báo thêm $name và dùng biến name để tạo ra chuỗi slug dùng hàm Str. đồng thời tạo ra các thư lục trong public như hình trên. trong thư mục /upload/files/users tôi tải 1 số hình ảnh để làm avatar, khi chạy factory thì laravel sẽ tự động lấy các hình ảnh trong mục này để làm avatar và copy nó sang mục /upload/image/users đồng thời ganarate tên file. khai báo false ở hàm factory file để chỉ trả về tên file. nếu để true thì hàm sẽ trả về fullpath của file trên máy tính, như vậy thì khi xử lý login link ảnh sẽ bị sai.
Chúng ta tải 1 số hình ảnh vào thư mục nguồn đã khai báo để làm avatar.
Để tạo seeder chúng ta chạy lệnh sau
php artisan make:seeder UserSeeder
Trong trường hợp này tôi đặt tên là UserSeeder. File seeder được tạo ra trong thư mục database/seeder
Lưu ý rằng trong thư mục seeder có file tên là DatabseSeeder.php file này là file chạy chính của seeder, sau khi ta khai báo các fie seeder của các bảng dữ liệu thì chúng ta phải gọi file seeder của các bảng muốn chạy seeder trong file này. Nếu chúng ta không gọi trong file này thì dữ liệu của bảng đó sẽ không được seed.
Ở file UserSeeder vừa tạo tôi sẽ use model vào và gọi hàm factory như hình, hàm count chúng ta truyền vào số bản ghi cần tạo. để sử dụng được hàm factory thì trong model chúng ta có nhúng thư viện factory như hình sau.
Việc nhúng thư viện factory trong model thì laravel đã tự động nhúng cho chúng ta rồi, chúng ta chỉ việc sử dụng nó thôi.
Bạn mở file DatabaseSeeder.php trong thư mục database/seeder lên và thêm dòng call đến UserSeeder như hình dưới.
Tiếp theo chúng ta chạy lệnh sau
php artisan db:seed
Chúng ta được kết quả như sau
Chúng ta kiểm tra dữ liệu trong database
Chúng ta thử lấy 1 đường link ở cột avatar nối với chuối localhost:8000 xem hình ảnh có hiển thị hay không
Như vậy là việc factory ảnh avatar chúng ta đã thành công.
Như vậy là trên đây tôi đã hướng dẫn chi tiết cách để chúng ta tạo ra dữ liệu mẫu hoàn toàn tự động, trong đó có sử dụng những hình ảnh của chúng ta để random ra avatar cho các bản ghi. Việc factory này có thể sẽ rất cần thiết để chúng ta triển khai các dự án backend cung cấp API cho các ứng dụng fontend, chúng ta dùng để tạo dữ liệu mẫu và test các chức năng khi phát triển hệ thống. Chúc bạn sẽ thực hiện thành công.