Hướng dẫn php artisan db:seed

  • Trang chủ
  • Hướng dẫn học
  • Laravel
  • Seeder

Seeder là gì?

  • Laravel có một tính năng rất hay là 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, thì 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 đặ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.
  • Xem xét một bảng chưa có dữ liệu news:

Hướng dẫn php artisan db:seed

  • Để tạo một Seeder mới, ta 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\myproject\

Hướng dẫn php artisan db:seed

  • Tạo seeder bằng lệnh Artisan: php artisan make:seed tên_seeder

php artisan make:seed ItemsTableSeeder

  • 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:

Hướng dẫn php artisan db:seed

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

  • 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.

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)
            ]);
        }
    }
}

  • Faker\Factory::create(); Khởi tạo dữ liệu Faker.
  • $limit = 10; tạo 10 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:

Hướng dẫn php artisan db:seed

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

Hướng dẫn php artisan db:seed

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

MụcFaker
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))))),'-')