Laravel Tutorial

Bài 26: Seeder trong Laravel

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