Tìm hiểu về Database Seeding trong Laravel


Cập nhật: 11 tháng trước
Bài viết ngẫu nhiên:

   Tại sao bạn nên học lập trình? Lập trình thực sự tốt cho cuộc sống của bạn?

   Lập trình Cơ sở dữ liệu Sql Server với Windows Form

   Bài 9. Xây dựng trang chi tiết trên Website Asp.Net với Visual Studio 2015

   Lập trình C# cơ bản: Bài 5. Sql Server (tạo database, table, relations, stored procedure)

   Tìm hiểu HTTP Request trong Laravel

   Full trọn bộ bài giảng lập trình C# từ A-Z (XD phần mềm, website asp.net)


Laravel có một phương thức đơn giản để seed database với dữ liệu test 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.

Viết Seeders

Để sinh ra một seeder, bạn có thể gọi lệnh make:seeder Artisan. Tất cả các seeder được sinh ra bởi framework sẽ được đặt trong thư mục database/seeds:

php artisan make:seeder UsersTableSeeder

Một seeder class chỉ chứa một phương thức mặc định là: run. Phương thức này được gọi khi mà chạy lệnh db:seed Artisan. Bên trong hàm run, bạn có thể chèn thêm dữ liệu vào database như bạn muốn. Bạn cũng có thể sử dụng query builder để thêm dữ liệu thủ công hoặc sử dụng Eloquent model factories.

Cùng thử làm một ví dụ, hãy cùng nhau sửa class DatabaseSeeder có sẵn sau khi cài đặt Laravel. Cùng nhau thêm một mệnh đề chèn dữ liệu bên trong hàm run:

<?php

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

class DatabaseSeeder extends Seeder
{
     public function run()
    {
        DB::table('users')->insert([
            'name' => str_random(10),
            'email' => str_random(10).'@gmail.com',
            'password' => bcrypt('secret'),
        ]);
    }
}

Sử dụng Model Factories

Dĩ nhiên là việc khai báo các thuộc tính cho các model seed một cách thủ công sẽ khá mất thời gian. Thay vì thế, bạn có thể sử dụng model factories để sinh ra lượng lớn các dữ liệu vào trong database một cách tiện lợi. Đầu tiên, hãy xem tài liệu về model factory documentation để biết cách khai báo các factories. Sau đó, bạn có thể sử dụng hàm factory để thêm dữ liệu vào trong database.

Ví dụ, hãy cùng nhau tạo 50 user và liên kết mối quan hệ cho mỗi user:

public function run()
{
    factory(App\User::class, 50)->create()->each(function($u) {
        $u->posts()->save(factory(App\Post::class)->make());
    });
}

Gọi các Seeders bổ sung

Bện trong class DatabaseSeeder bạn có thể dùng hàm call để thực thi các seed class bổ sung. Sử dụng hàm call cho phép bạn phân tách cấu trúc seed vào database thành nhiều file, vì thế, sẽ không có seed class nào trở nên quá lớn. Đơn giản là chỉ cần tên của seeder class mà bạn muốn thực thi:

public function run()
{
    $this->call(UsersTableSeeder::class);
    $this->call(PostsTableSeeder::class);
    $this->call(CommentsTableSeeder::class);
}

Thực thi Seeders

OKhi bạn đã viết các seeder class, bạn có thể sử dụng câu lệnh db:seed Artisan để seed vào database. Mặc định, câu lệnh db:seed thực thi class DatabaseSeeder, mà các bạn có thể sử dụng để gọi các seed class khác. Tuy nhiên, bạn cũng có thể sử dụng tuỳ chọn --class để chỉ định thực hiện một seed class nào đó:

php artisan db:seed
php artisan db:seed --class=UsersTableSeeder

Bạn cũng có thể seed database sử dụng câu lệnh migrate:refresh, ngoài ra có thể sử dụng rollback và thực thi lại tất cả các migrations. Câu lệnh này cũng khá hữu ích trong việc thiết lập lại toàn bộ cấu trúc database:

php artisan migrate:refresh --seed

Nguồn: Laravel.com

Xem thêm

   So sánh giữa hai công nghệ xây dựng website: PHP và ASP.NET

   11 xu hướng thiết kế web trong năm 2019

   GIS là gì? Thành phần, chức năng, nhiệm vụ và ứng dụng của công nghệ GIS

   Bạn sẽ chọn ngành nào phù hợp với lĩnh vực Công nghệ Thông tin?

   Bạn hiểu thế nào là nghề lập trình? để bước vào nghề lập trình thì phải học những gì?

   Lập trình máy tính là gì? Các ngôn ngữ lập trình, phát triển phần mềm

   Tại sao bạn phải hiểu và có kỹ năng về lập trình hướng đối tượng?

   Xử lý hình ảnh (images) với Bootstrap CSS FrameWork phiên bản 4.x

   Để học lập trình bạn nên lựa chọn ngôn ngữ lập trình nào?

   Top 25 bài giảng có số lượt xem cao nhất thời điểm hiện tại

   Có gì khác biệt giữa HTML và HTML5?

   5 yếu tố quan trọng của định hướng thị giác trong thiết kế web

   Một số thẻ và Type quan trọng với HTML5 cần chú ý trong quá trình thiết kế website

Xem nhiều nhất

   Giáo trình hướng dẫn Microsoft PowerPoint 2016 từ cơ bản đến nâng cao

   Chia sẻ Full bộ lịch âm dương 2019 vector - File PNG, JPEG và AI (Adobe Illustrator)

   Hệ thống bài giảng e-Learning lớp Ứng dụng CNTT và các phần mềm vào đổi mới phương pháp dạy và học

   Thiết kế trò chơi ô chữ trong powerpoint (download miễn phí)

   Thực hành biên tập, thiết kế, chỉnh sửa Videos bằng Adobe Premiere

   Thiết lập hiệu ứng trống đồng quay trong Microsoft PowerPoint

   Trọn bộ Giáo trình Microsoft Word 2016 từ cơ bản đến nâng cao

   Hướng dẫn sử dụng phần mềm bảng tương tác thông minh ActivInspire

   Xây dựng Website tin tức bằng PHP và MySql theo phương pháp lập trình hướng đối tượng (mysqli Object Oriented)

   Cài đặt và sử dụng tính năng mới của Office 365 trên Office 2016

   Thực hành sử dụng phần mềm thiết kế đồ họa Adobe Illustrator

   Hướng dẫn thu âm, chỉnh sửa âm thanh, tăng giảm tone nhạc bằng phần mềm Adobe Audition CC

   Tạo câu hỏi trắc nghiệm với siêu liên kết (hyperlink) và Trigger với PowerPoint 2016

   Bài giảng Microsoft PowerPoint 2013 và 2016 từ cơ bản đến nâng cao

   Thực hành sử dụng phần mềm thiết kế đồ họa Corel Draw

   Dòng chữ chạy liên tục từ trái qua phải và đồng hồ đếm ngược trong PowerPoint