Database Seeder di Laravel

Yugo
Laravel Indonesia
Published in
2 min readOct 24, 2016

Jika migrations berfungsi untuk menjalankan DDL (Data Definition Language), maka database seeder pada Laravel berfungsi untuk menjalankan DML (Data Manipulation Language). Database seeder sangat berguna untuk inisiasi data pada tabel atau beberapa tabel ketika setup aplikasi pertama kali. Bisa juga untuk memperbarui data yang sudah ada atau menghapusnya dari belakang layar.

Membuat Database Seeder

Hampir sama dengan membuat migrations, membuat database seeder juga dapat digenerate menggunakan artisan. Jalankan perintah di bawah untuk membuat berkas baru Seed, dengan format php artisan make:seed [seeder name]. Misal:

$ php artisan make:seed PageTableSeeder

Perintah di atas akan membuat sebuah berkas baru dalam direktori database/seeds dengan nama PageTableSeeder.php. Secara bawaaan, berkas ini sudah berisi sebuah class untuk menjalankan seed tersebut, dilengkapi dengan dependecy class-nya.

Menambahkan Data ke Table Menggunakan Seeder

Mari sedikit kita modifikasi berkas seeder tersebut. Ketika dijalankan, maka akan menambahkan data baru ke dalam tabel pages yang sudah dibuat sebelumnya menggunakan Migrations.

Perhatikan baris yang ditandai. Baris tersebut merupakan modifikasi yang telah ditambahkan pada berkas PageTableSeeder.php.

Untuk menjalankannya, ketik perintah di bawah pada command line.

$ php artisan db:seed — class=PageTableSeeder

Opsi --class merujuk kepada nama class pada berkas PageTableSeeder.php.

Selain dapat dijalankan melalui command line, artisan juga dapat dijalankan langsung melalui aplikasi yang dibangun.

$command = \Artisan::call('db:seeder', [
'--class' => 'PageTableSeeder'
]);

Letakkan potongan sintaks di atas sesuai kebutuhan, baik di Controller, Model, Middleware, ataupun Router.

Multi Data

Selain datanya diisi secara hardcode, kita juga bisa memanfaatkan package Faker untuk membuat dummy data yang jumlahnya dapat ditentukan sendiri.

Call Once, Run All

Seandainya terdapat banyak seeder yang kesemuanya harus dijalankan, tanpa perlu menjalankannya satu per-satu, kita dimungkinkan untuk membuat base seeder untuk menjalankan satu per satu dengan hanya satu perintah artisan. Metho yang akan tersedia dan akan digunakan bernama call().

Pertama, buat dahulu base seeder, misal php artisan make:seed ExampleDataSeeder. Kemudian modifikasi berkas tersebut seperti di bawah.

Jalankan dengan perintah php artisan db:seed --classExampleDataSeeder.

Tanpa harus membuat base seeder, kita juga bisa menjalankan seeder pada saat migration dijalankan dengan menambahkan opsi --seed.

$ php artisan migrate -- seed

--

--