post-image

[Bài đọc] Sử dụng seeding

Cơ sở dữ liệu

Seeding được dùng để làm gì?

Laravel cung cấp một phương thức đơn giản để đưa dữ liệu thử nghiệm hàng loạt vào trong cơ sở dữ liệu bằng việc sử dụng các seed class. Tất cả các seed class được lưu trong thư mục database/seeds. Các seed class có thể được đặt tên tuỳ ý, nhưng tốt nhất là nên đặt theo một nguyên tắc dễ nhận biết, ví dụ như là UsersTableSeeder, etc. Mặc định, một DatabaseSeeder được định nghĩa sẵn cho bạn. Từ class này, bạn có thể sử dụng phương thức call để gọi tới các seed class khác, cho phép bạn điều khiển thứ tự seed dữ liệu vào trong database.

Tạo các file seeding

Để tạo file seeding, chúng ta sử dụng câu lệnh artisan: make:seeder:

php artisan make:seeder UsersTableSeeder

Mỗi lớp seeding chỉ chứa một phương thức duy nhất: run.  Phương thức này được thực thi để chèn dữ liệu vào CSDL.

Ví dụ:

<?php

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;

class DatabaseSeeder 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' => bcrypt('secret'),
        ]);
    }
}

Trong ví dụ trên, chúng ta đã chèn một người dùng mới, với tên và email ngẫu nhiên, mật khẩu là ‘secrete’. 

Lưu ý: Phương thức bcrypt được sử dụng để mã hoá mật khẩu trước khi lưu vào CSDL.

Gọi các file seeding

Trong lớp DatabaseSeeder chúng ta có thể sử dụng phương thức call để quy định trật tự thực thi các file seeding.

Ví dụ:

/**
 * Run the database seeds.
 *
 * @return void
 */
public function run()
{
    $this->call(UsersTableSeeder::class);
    $this->call(PostsTableSeeder::class);
    $this->call(CommentsTableSeeder::class);
}

Thực thi seeding

Khi bạn viết seeder, bạn cần phải tạo lại Composer’s autoloader bằng cách sử dụng câu lệnh dump-autoload:

composer dump-autoload

Sau khi hoàn thành việc định nghĩa các file seeding, chúng ta thực thi bằng cách dùng câu lệnh artisan:

php artisan db:seed

hoặc tuỳ chọn --class để chỉ định thực hiện một seed class nào đó:

php artisan db:seed --class=UsersTableSeeder

Ngoài ra, chúng ta cũng có thể sử dụng câu lệnh refresh để tạo lại CSDL từ đầu.

php artisan migrate:refresh --seed

Leave a Reply

Your email address will not be published.