Tìm hiểu về Seeder trong Laravel | Học Laravel

Xin chào anh em, tiếp tục series Laravel và những điều thú vị về nó, hôm nay mình sẽ giới thiệu về Seeder trong Laravel cho các bạn. Như các bạn biết đấy, khi chúng ta tạo xong CSD. Bây giờ chúng ta cần có một số lượng dữ liệu kha khá lớn để hiển thị lên website của chúng ta, thay vì cách nhập tay thủ công thông thường vừa tốn thời gian vừa tốn công thì Laravel hỗ trợ chúng ta Seeder để nhanh chóng tạo dữ liệu , nhanh chóng để phát triển tính năng của chúng ta.

1. Cấu trúc thư mục

Tất cả các seed class được đặt trong thư mục database/seeds. trong thư mục này đã có sẵn file DataTableSeeder.php

a7f79df6 f9a4 48b3 9017 a23fab21cfe8a7f79df6 f9a4 48b3 9017 a23fab21cfe8

use

Illuminate

\

Database

\

Seeder

;

class

DatabaseSeeder

extends

Seeder

{

public

function

run

()

{ } }

Code language:

HTML, XML

(

xml

)

Mặc định trong file này sẽ có class DatabaseSeeder có function run() call tới các seed class khác, cho phép bạn có thể control được thứ tự thêm dữ liệu theo thứ tự bạn sắp xếp.

2. Các cách insert dữ liệu bằng Seeder

Có rất nhiều cách để thêm dữ liệu bằng seeder , sau đây mình xin giới thiệu về một trong những cách đó.

Viết thẳng trong file DataTableSeeder.php

Chúng ta có thể viết trực tiếp trong function run()

use

Illuminate

\

Database

\

Seeder

;

class

DatabaseSeeder

extends

Seeder

{

public

function

run

()

{ DB::table(

'categories)->insert([ ['

name

' => '

Điện

'], ['

name

' => '

Laptop

'], ['

name

' => '

Tivi

'], ]); } }

Code language:

PHP

(

php

)

hoặc chúng ta cũng có thể tách riêng ra 1 class và sử dụng hàm hàm call() trong function run().

ada54590 fe05 4434 94ef 2a1e44b69ac2ada54590 fe05 4434 94ef 2a1e44b69ac2

Lúc này xong , chúng ta sẽ chạy câu lệnh để thực thi chèn dữ liệu vào bảng catgories : php artisan db:seed.

Sử dụng Model Factories

Các bạn thấy sử dụng cách trên nó vẫn còn thủ công, chúng ta phải thêm từng record cho một bảng bằng tay. Thay vì thế, để sinh ra một lượng dữ liệu lớn như 100 records chúng ta sẽ sử dụng Model Factories. Bây giờ các bạn hãy follow theo ví dụ của mình để có thể hiểu thêm về nó nhé.
Ví dụ đặt ra là chúng ta cần tạo 1000 records trong bảng users.

Trong folder database ta sẽ thấy còn có một folder nữa là factories, bên trong folder này có 1 file tên là UserFactory.php dùng để định nghĩa cấu trúc của dữ liệu mẫu mà ta muốn thêm vào CSDL theo từng bảng. Trong folder đó có chứa sẵn UserFactory.php

use

Faker

\

Generator

as

Faker

; $factory->define(App\User::class,

function

(Faker $faker)

{

return

[

'name'

=> $faker->name,

'email'

=> $faker->unique()->safeEmail,

'password'

=>

'$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm'

,

'remember_token'

=> str_random(

10

), ]; });

Code language:

HTML, XML

(

xml

)

Bây giờ chúng ta tạo 1 file giống ý hệt file này nhưng đổi tên thành SupplierFactory.php hoặc có thể sử dụng terminal để tạo php artisan make:factory SupplierFactory

use

Faker

\

Generator

as

Faker

; $factory->define(App\Models\Supplier::class,

function

(Faker $faker)

{

return

[

'name'

=> $faker->name,

'address'

=> $faker->address,

'phone'

=> $faker->phoneNumber,

'email'

=> $faker->unique()->safeEmail,

'created_at'

=>

new

DateTime,

'updated_at'

=>

new

DateTime, ]; });

Code language:

HTML, XML

(

xml

)

Các bạn sẽ nhìn thấy trong file này nó use Faker\Generator as Faker. Đây là một thư viện fake data rất hữu ích, chúng ta không cần phải nghĩ ra những địa chỉ, những số điện thoại hay email để thêm vào table. Điểu đó đã được thự viện Faker hỗ trợ hết.
Tiếp theo chúng ta sẽ sẽ tạo file seeder : php artisan make:seed SupplierTableSeeder , sau khi ấn enter một file SuplierTableSeeder sễ được sinh ra trong folder database/seeds.

use

Illuminate

\

Database

\

Seeder

;

class

SuppliersTableSeeder

extends

Seeder

{

public

function

run

()

{ factory(App\Models\Supplier::class,

1000

)->create(); } }

Code language:

HTML, XML

(

xml

)

Trong function run() chúng ta sẽ sử dụng hàm của helper trong Laravel là hàm factory(). Đối số thứ nhất truyền vào class Model , đối số thứ hai truyền vào số lượng bản ghi muốn sính ra.
Giờ chúng ta vào file DatableSeeder.php trong hàm run() :

use

Illuminate

\

Database

\

Seeder

;

class

DatabaseSeeder

extends

Seeder

{

public

function

run

()

{

$this

->call(SuppliersTableSeeder::class); } }

Code language:

HTML, XML

(

xml

)

Và cuối cùng chạy lệnh php artisan db:seed
Hoặc chúng ta cũng có thể chạy file SupplierTableSeeder.php bằng câu lệnh : php artisan db:seed --class=SupplierTableSeeder

Chú ý!

Để chạy nhiều Seeder ta sẽ tạo nhiều file Seeder rồi gọi chúng trong functionrun() ở file DataTableSeeder.php :

use

Illuminate

\

Database

\

Seeder

;

class

DatabaseSeeder

extends

Seeder

{

public

function

run

()

{

$this

->call(UsersTableSeeder::class);

$this

->call(RolesTableSeeder::class);

$this

->call(CategoriesTableSeeder::class);

$this

->call(SuppliersTableSeeder::class);

$this

->call(ProductsTableSeeder::class);

$this

->call(ImagesTableSeeder::class); } }

Code language:

HTML, XML

(

xml

)

Các bạn hãy chú ý table nào cần thêm dữ liệu trước để sắp xếp thứ tự trong function run() nhé!!!

3. Kết luận

Bài viết trên nhằm giới thiệu đến các bạn sử dụng Seeder trong Laravel , vừa tiết kiệm thời gian vừa đỡ tốn công. Hẹn gặp lại các bạn ở các bài tiếp theo.

Các bạn có thể tham khảo các bài viết hay về Laravel tại đây.

Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.

Tham khảo: Viblo

Share this: