Tiếp tục với chuỗi bài làm việc với Database trong Laravel, bài này mình sẽ giới thiệu với mọi người về seeder trong Laravel 8.
1. Seeder là gì?
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.
2. Tạo mới Seeder.
Để tạo mới một seeder trong Laravel các bạn có thể sử dụng command:
php artisan make:seeder SeederName
Trong đó: SeederName
là tên của seeder các bạn muốn tạo.
VD: 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.
VD: Mình sẽ 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.
VD: Gọi UserSeeder
trong DatabaseSeeder
.
<?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
]);
}
}
3. Chạy seeder.
Để thực thi các seeder trong Laravel các bạn sử dụng câu lệnh
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.
VD: 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
.
VD:
php artisan db:seed --force
3. Lời kết.
Trong quá trình phát triển dự án, việc thay đổi dữ liệu database là điều không tránh khỏi, chính vì thế seeder sẽ hỗ trợ chúng ta làm việc đó một cách đơn giản.
Đăng ký nhận tin.
Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!
0 Comments