Tìm hiểu Seeding trong Laravel

Tram Ho

Giới thiệu

  • Laravel cung cấp phương pháp dễ dàng tạo dữ liệu mẫu trong database bằng các lớp seed.
  • Các lớp seed nằm trong thư mục database/seeds.

  • Các lớp seed có thể được đặt tên bất kỳ, nhưng nên được đặt theo một số quy tắc, VD PostsTableSeeder.
  • Mặc định lớp DatabaseSeeder được tạo sẵn, trong lớp này bạn có thể call các seed khác.

Tạo Seeders

  • Để tạo một seed ta dùng lệnh php artisan make:seed [tên_seed].

  • Một lớp seed chỉ chứa phương thức mặc định run.
  • Phương thức này sẽ được gọi khi chạy lệnh artisan cmd php artisan db:seed.
  • Trong phương thức run ta sẽ insert dữ liệu.

Sử dụng Factory

  • Tùy vào nhu cầu người dùng có thể insert dữ liệu bằng tay hay sử dụng sử liệu random.
  • Sử dụng model factory để tạo ra nhiều bản ghi.
  • Để tạo factory ta dùng lệnh php artisan make:factory [tên_factory] VD: PostFactory

  • Ta cần sửa lại model và bắt đầu insert dữ liệu, ở dưới đây tôi sử dụng faker để tạo dữ liệu mẫu.
  • Một số faker mẫu.
#Cú phápKết quả ví dụ
1$faker->randomDigit7
2$faker->word‘aut’
3$faker->name‘Dr. Zane Stroman’
4$faker->address‘8888 Cummings Vista Apt. 101, Susanbury, NY 95473’
5$faker->phoneNumber‘201-886-0269 x3767’
6$faker->company‘Bogan-Treutel’
7$faker->text‘Dr. Zane Stroman’
9$faker->dateTime($max = ‘now’, $timezone = null)DateTime(‘2008-04-25 08:37:17’, ‘UTC’)
10$faker->email[email protected]
11$faker->chrome‘Mozilla/5.0 (Macintosh; PPC Mac OS X 10_6_5) AppleWebKit/5312 (KHTML, like Gecko) Chrome/14.0.894.0 Safari/5312’
12$faker->hexcolor‘#fa3cc2’
13$faker->fileExtension‘avi’
14$faker->imageUrl($width = 640, $height = 480)URL ảnh có kích thước 640 x 480
15$faker->uuid‘7e57d004-2b97-0e7a-b45f-5387367791cd’
16$faker->ean13‘4006381333931’
17$faker->md5‘de99a620c50f2990e87144735cd357e7’
18$faker->randomHtml(2,3)Tạo tài liệu HTML sâu không quá 2 cấp và rộng không quá 3 phần tử ở mọi cấp.

  • Sau khi định nghĩa sau thì trong hàm run của lớp PostsTableSeeder ta chỉ cần gọi factory(tên_lớp, số_lượng)->create() .

Gọi Seeders

  • Trong lớp DatabaseSeeder, ta có thể call các lớp seed khác.

  • Chú ý khi call các lớp phải theo thứ tự quan hệ. VD: Ở trên ta chạy CategoriesTableSeeder trước vì PostsTableSeeder cần có category_id để insert vào trong cột category_id của PostsTableSeeder .

Chạy Seeders

  • Trước khi chạy bạn nên load lại các file sử dụng composer dump-autoload
  • Sử dụng php artisan db:seed để chạy tất cả các file được call trong lớp DatabaseSeeder.
  • Chỉ định seed một lớp php artisan db:seed --class=UsersTableSeeder.
  • Sử dụng php artisan migrate:fresh --seed để xóa tất cả các bảng sau đó chạy lại các bảng và seed.

Kết luận

  • Seed cho phép tạo dữ liệu mẫu nhanh chóng và tái sử dụng lại.
  • Với thư viện Faker cho phép tạo những dữ liệu mẫu đúng với thực tế hơn.
  • Thuật lợi cho quá trình phát triển và kiểm thử ứng dụng.

Tài liệu tham khảo

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo