Đào tạo Tin học Trực tuyến

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


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

   Giải pháp xây dựng mô hình tích hợp Cơ sở dữ liệu qua chuẩn XML

   Tìm hiểu về View trong Laravel

   Phân trang (thiết lập Pagination) trong Laravel

   XD phần mềm Quản lý điểm: Bài 5. Xử lý dữ liệu Bảng Môn học phần và Cập nhật dữ liệu vào Bảng Điểm học phần

   XD phần mềm Quản lý điểm: Bài 8. Xử lý Bảng điểm chi tiết của Sinh viên

   Laravel: Bảo mật Website của bạn với Middleware


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

   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

   Xử lý text với Typography trong Bootstrap 4 CSS FrameWork

   Bootstrap 4.0: Bài 2. Thiết lập hệ thống lưới Grid System

   Bootstrap 4.0: Bài 1. Giới thiệu và các thiết lập cơ bản về công cụ, css, javascript

Xem nhiều nhất

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

   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

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

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

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

   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)

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

   Trọn bộ Giáo trình Microsoft Word 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 Adobe Illustrator

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

   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

   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

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

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

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

   Full Download phần mềm biên soạn bài giảng e-Learning iSpring Sute phiên bản 8.1