Seeder trong Laravel là class cho phép chúng ta xử lý dữ liệu trong database. Class này sẽ hỗ trợ chúng ta tạo ra data test, thay đổi cập nhật dữ liệu khi cần thiết.
Tất cả các seeder trong Laravel đều được đặt trong thư mục database/seeders
. Mặc định thì Laravel đã định nghĩa sẵn cho chúng ta class DatabaseSeeder
nằm sãn trong thư mục trên. Và chúng ta có thể sử dụng phương thức call để gọi các seeder khác khi cần thiết
1. Tạo mới Seeder
Ví dụ: Mình sẽ tạo một UserSeeder
php artisan make:seeder UserSeeder
Một Seeder class mặc định chỉ chứa duy nhất một phương thức run. Phương thức này sẽ được thực thi khi chúng ta chạy câu lệnh db:seed. Trong phương thức này các bạn có thể viết logic để làm việc với DB như sử dụng Query Builder hoặc dùng Eloquent model factories
Ví dụ: Sử dụng Query Builder insert thêm user trong UserSeeder
vừa tạo ở trên
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
class UserSeeder extends Seeder {
/** * Run the database seeds.
* * @return void */
public function run() {
DB::table('users')->insert([
'name' => Str::random(10),
'email' => Str::random(10).'@gmail.com',
'password' => Hash::make('password'),
]);
}
}
Gọi các seeder khác
Để thực thi các seeder khác trong seeder nào đó các bạn có thể sử dụng phương thức call
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder {
/** * Seed the application's database.
* * @return void */
public function run() {
$this->call([
UserSeeder::class
]);
}
}
2. Chạy seeder
php artisan db:seed
Câu lệnh này sẽ thực thi Database\Seeders\DatabaseSeeder
class
Để thực thi một seeder
cụ thể trong Laravel các bạn truyền thêm tham số --class
với seeder class các bạn muốn chạy
Ví dụ: Thực thi UserSeeder
php artisan db:seed --class=UserSeeder
Khi ứng dụng qua bạn đang ở trên production
, mà các bạn chạy seeding thì Laravel sẽ hiển thị ra một prompt để xác nhận lại xem các bạn có thực sự muốn thực thi seeder trên production hay không. Nếu các bạn không muốn hiển thị prompt mà muốn force chạy luôn seed các bạn có thểm truyền thêm tham số --force
php artisan db:seed --force
Leave a Comment