Seeder trong Laravel

Trong bài trước chúng ta đã được học cách chèn dữ liệu vào database trong Laravel rồi. Thế nhưng cách này rất mất thời gian, trong những trường hợp bạn muốn chèn nhanh dữ liệu mẫu thì lại không khả thi cho lắm. Thật tuyệt vời Laravel cung cấp cho chúng ta 1 giải pháp để tạo dữ liệu mẫu tự động và đó chính là nội dung bài học của chúng ta trong ngày hôm nay: Seeder trong Laravel.

Seeder trong Laravel là gì?

Seeder Laravel cho phép tạo dữ liệu mẫu một cách tự động, với số lượng nội dung được thêm bất kỳ. Thay vì nhập dữ liệu mẫu bằng tay, chúng ta có thể dùng vài dòng lệnh để nhập hàng loạt các dữ liệu mẫu, đặc biệt dữ liệu được tạo có nội dung gần với kiểu giá trị của nó.

Tạo dữ liệu mẫu với seeder

Seeder cần phải đặt bên trong thư mục /database/seeders/.

Để seeder hoạt động, chúng ta cần kết nối với cơ sở dữ liệu, nếu chưa biết cách kết nối thì bạn xem phần Kết nối database.

Chúng ta xem một bảng chưa có dữ liệu news sau:

Để tạo một Seeder mới, chúng có thể tạo file trực tiếp bên trong thư mục /database/seeders/, hoặc tạo từ cửa sổ lệnh, mở cửa sổ lệnh cmd, di chuyển tới thư mục myproject bằng lệnh:

cd C:\xampp\htdocs\phamnhan\

Sử dụng lệnh sau để tạp Seeder

php artisan make:seed tên_seeder


Ví dụ

php artisan make:seed ItemsTableSeeder

Trong đó

  • php artisan - Công cụ hỗ trợ viết command line tích hợp sẵn trong Laravel, sẽ còn gặp lại nhiều.
  • make:seed - Lệnh tạo seeder.
  • ItemsTableSeeder - Tên seeder do mình tự đặt.

Dòng lệnh trên thực thi sẽ cho ta kết quả sau:

File seeder vừa tạo sẽ được lưu tại thư mục /database/seeders/, có nội dung như sau:

<?php

use Illuminate\Database\Seeder;

class ItemsTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //
    }
}

Trong đó

  • use Illuminate\Database\Seeder; là khai báo sử dụng cần cho thao tác liên quan đến seeder.
  • Cái chúng ta cần quan tâm là function run()

Bây giờ ta tiến hành tạo dữ liệu mẫu cho bảng news bên trên. Nhìn vào cấu trúc của news, ta thấy có 6 cột: id, created_at, updated_at, headline, email và slug, ta bắt đầu tạo các dữ liệu mẫu cho các cột này theo bên dưới đây.

<?php

use Illuminate\Database\Seeder;

class ItemsTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $fake  = Faker\Factory::create();
        $limit = 15;

        for ($i = 0; $i < $limit; $i++){
            DB::table('news')->insert([
                'title' => $fake->name,
                'created_at' => date("Y-m-d H:i:s"),
                'updated_at' => date("Y-m-d H:i:s"),
                'email' => $fake->unique->email,
                'description' => $fake->sentence(15)
            ]);
        }
    }
}

Giải thích 

  • Faker\Factory::create(); Khởi tạo dữ liệu Faker.
  • $limit = 15; tạo 15 record dữ liệu.
  • Sau cùng là chạy vòng lặp for với các giá trị dữ liệu tạo tương ứng insert vào bảng news.

Bước trên là bước chuẩn bị sẵn sàng tạo dữ liệu cho bảng news, để tiến hành tạo dữ liệu, ta cần chạy lệnh artisan:

php artisan db:seed --class=ItemsTableSeeder

Khi chạy lệnh trên, nếu kết quả xuất hiện thông báo sau là thành công:

Kiểm tra bảng news lúc này sẽ thấy có dữ liệu sau:

Một số Faker tạo dữ liệu mẫu

Mục
Faker
Title, Name
$fake->name
Description
$fake->sentence
Content
$fake->sentence(500)
Label
$fake->randomLetter
Email
$fake->unique->email
Tel
$fake->phoneNumber
Number
$fake->numerify($string = '###')
City
$fake->city
Postcode
$fake->country
Country
$fake->city
Category
$fake->numberBetween($min = 1, $max = 2)
Public
$fake->boolean()
Image
$fake->imageUrl($width = 200, $height = 200)
Date
$fake->date("Y-m-d H:i:s")
Slug
$fake->rtrim(str_replace('--', '-', strtolower(preg_replace('/[^a-zA-Z0-9]/', '-', trim($fake->sentence(5))))),'-')


Lời kết:

Trên đây là cách dùng seeder trong Laravel để tạo dữ liệu mẫu một cách nhanh chóng. Hi vọng sẽ giúp ích được cho các bạn. Chúc các bạn thành công!

Bình luận