[Bài đọc] Sử dụng seeding
NỘI DUNG BÀI VIẾT
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