Latest Post

Tăng thứ hạng và truy cập tự nhiên với 10 phương pháp SEO hay nhất Kiếm Tiền Online (mmo): Khái Niệm và Các Hình Thức Phổ Biến

Ở bài trước, chúng ta đã đào sâu vào Laravel Migration, một công cụ quan trọng để định nghĩa và xây dựng cấu trúc của cơ sở dữ liệu, từ bảng đến các cột, mối quan hệ và chỉ mục. Trong bài viết này, chúng ta sẽ khám phá tính năng khác của Laravel, được gọi là Laravel Database Seeding. Đây là một công cụ quan trọng giúp xây dựng dữ liệu khởi tạo, đồng bộ dữ liệu giữa các môi trường.

Laravel Seeding là gì?

Trong Laravel, quá trình tạo cơ sở dữ liệu được thực hiện thông qua việc sử dụng các class được định nghĩa sẵn. Laravel sử dụng mã PHP để thực hiện các câu lệnh INSERT, UPDATE, DELETE dựa trên các kịch bản mà bạn đã xây dựng sẵn. Mặc định, Laravel cung cấp sẵn một lớp có tên là DatabaseSeeder cho bạn.

Lớp DatabaseSeeder này là nơi bạn có thể xác định và chạy các phương thức gọi để thực hiện các class khác nhau. Điều này mang lại cho bạn sự linh hoạt trong việc kiểm soát thứ tự thực hiện các tác vụ trong quá trình seeding cơ sở dữ liệu của mình.

Laravel Seeding được sử dụng khi nào?

Đây là các trường hợp mà vinasupport.com thường sử dụng Laravel Seeding

  1. Khởi tạo dữ liệu ban đầu (init data)
  2. Tạo dữ liệu master
  3. Đồng bộ và migrate dữ liệu giữa các môi trường

Hướng dẫn sử dụng Laravel Seeding

Tạo một Database Seeding

Chúng ta tạo một class tương ứng bằng cách sử dụng lệnh artisan

php artisan make:seeder CategorySeeder

Nó sẽ tạo 1 file có đường dẫn thư mụcdatabase/seeders/CategorySeeder.php

Có nội dung code giống như là: (Trên Laravel 9)

<?php

namespace DatabaseSeeders;

use IlluminateDatabaseConsoleSeedsWithoutModelEvents;
use IlluminateDatabaseSeeder;

class CategorySeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        //
    }
}

Method run() sẽ là nới chúng ta viết code để xử lý seed dữ liệu database như sau:

<?php

namespace DatabaseSeeders;

use AppModelsCategory;
use CarbonCarbon;
use IlluminateDatabaseConsoleSeedsWithoutModelEvents;
use IlluminateDatabaseSeeder;

class CategorySeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        // Truncate
        Category::truncate();
        // Category data
        $categories = [
            'Encoders',
            'Converters',
            'Formatters',
            'String Utility',
        ];
        foreach ($categories as $catId => $catTitle) {
            $insertData[] = [
                'cat_id' => $catId + 1,
                'cat_title' => $catTitle,
                'cat_name' => Str::slug($catTitle),
                'created_at' => Carbon::now(),
                'updated_at' => Carbon::now(),
            ];
        }
        // Seed Categories
        if (!empty($insertData)) {
            Category::insert($insertData);
        }
    }
}

Chạy database seeding

Bảng categories của mình có cấu trúc dữ liệu như sau:

Để chạy file database seeding chúng ta chạy command artisan như sau:

php artisan db:seed --class=CategorySeeder

Kết quả trong bảng ta được dữ liệu như sau:

Chạy nhiều database seeding

Để chạy toàn bộ database seeding cùng 1 lúc, bạn cần tạo nhiều file Seeder. Sau đó đưa chúng vào file mặc định database/seeders/DatabaseSeeder.php

<?php

namespace DatabaseSeeders;

// use IlluminateDatabaseConsoleSeedsWithoutModelEvents;
use IlluminateDatabaseSeeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     */
    public function run(): void
    {
        // AppModelsUser::factory(10)->create();

        // AppModelsUser::factory()->create([
        //     'name' => 'Test User',
        //     'email' => '[email protected]',
        // ]);
        $this->call(UserSeeder::class);
        $this->call(CategorySeeder::class);
    }
}

Sau đó chạy command sau:

php artisan db:seed

Migrade và đồng bộ lại toàn bộ dữ liệu.

Kết hợi với Laravel Migration, chúng ta chạy câu lệnh sau. Nó sẽ xóa hết các bảng trong CSDL, tạo lại chúng và đồng bộ dữ liệu từ các Seeder

php artisan migrate:fresh --seed

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *