Menggunakan Seeder di Laravel

Anugrah Sandi 31 Oktober 2017

Menggunakan Seeder di Laravel

Kali ini kita akan membahas salah satu fitur yang cukup menarik yang telah disediakan oleh laravel yaitu Seeders. Sebelum melangkah lebih jauh kita akan mengenali apa sih seed itu dan dalam keadaan seperti apa dapat digunakan? Adapun poin yang akan kita capai dalam pembalajaran kali ini diantaranya :

  1. Membuat Seeders
  2. Menggunakan Model Factories
  3. Menggunakan seed yang telah dibuat
  4. Menjalankan Seeders

Apa itu Seeder?

Secara pengertian seed dalam bahasa indonesia berarti benih. Maka sebagaimana benih, seeder dapat digunakan untuk membuat sample data atau dummy data dengan command yang sederhana. Maka anda tidak perlu repot untuk melakukan penginputan data secara berulang pada saat proses testing. Hal ini tentunya akan mempercepat proses development yang anda lakukan. Mengapa? Karena anda cukup sekali membuat “benih data” yang dapat digunakan secara berulang kali saat dibutuhkan

Membuat Seeders

Perlu diketahui bahwa secara default laravel menempatkan file seed yang kita buat kedalam direktori database/seeds. Class seed dapat menggunakan nama sesuai yang anda inginkan, akan tetapi dan sebaiknya nama yang digunakan mewakili sample data yang akan kita buat, misal : UsersTableSeeder yang mewakili sample data untuk users. Untuk membuat seed, maka anda cukup menggunakan fitur menarik lainnya yakni : artisan command. Dengan artisan command anda dapat meng-generate file seeder hanya dengan sekali command dan ditempatkan pada direktori database/seeds. Untuk menjalankannya silahkan jalankan command berikut pada command line anda :

php artisan make:seeder UsersTableSeeder

Secara default seeders hanya memiliki satu method yakni : run. Method ini akan di eksekusi dengan menggunakan artisan command : php artisan db:seed. Method ini juga dapat digunakan untuk memasukkan dummy data yang anda inginan kedalam database dengan menggunakan Query builder atau Eloquent. Langsung saja, silahkan buka file seeder yang telah kita buat pada direktori database/seeds dengan nama UsersTableSeeder.php

<?php

use Illuminate\Database\Seeder;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //
    }
}

Pada method run tambahkan code berikut :

\App\User::create([
        'name'	=> str_random(20),
        'email'	=> str_random(10) . '@codepolitan.com',
        'password'	=> bcrypt('secret')
]);

Untuk menjalankan seed yang telah kita buat akan dikerjakan pada poin selanjutnya. Namun sebelum itu kita akan membuat dummy data lainnya dengan menggunakan Model Factory untuk melakukan perbandingan.

Menggunakan Model Factories

Selain menggunakan cara diatas, ada cara efektif lain yang dapat dimanfaatkan untuk melakukan penginputan dummy data yang tergolong banyak dengan menggunakan Model Factory. Dengan memanfaatkan helper factory memungkinkan kita untuk menginput data dalam jumlah banyak sesuai keinginan tanpa perlu mengetikkan satu persatu sample data yang akan dimasukkan. Pada method run ketikkan potongan code berikut :

factory(\App\User::class, 3)->create();

Code diatas akan menginput data secara otomatis sebanyak 3. dan jika anda menginginkan jumlah data yang lebih cukup mengganti parameter kedua yang dibutuhkan oleh factory helper yaitu angka 3.

Menggunakan seed yang telah dibuat

Dengan DatabaseSeeder.php yang terletak pada direktori database/seeds, anda dapat memanggil seeder yang telah dibuat dengan menggunakan method call. Pada method run tambahkan potongan code berikut :

$this->call(UsersTableSeeder::class);

Jika anda memiliki lebih dari satu seeder maka cukup gunakan method call kembali dengan mengganti nama seeder sesuai nama seed yang ingin anda panggil. Semisal :

$this->call(UsersTableSeeder::class);
$this->call(PostsTableSeeder::class);

maka secara lengkap code yang terdapat DatabaseSeeder.php akan menjadi seperti berikut :

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $this->call(UsersTableSeeder::class);
    }
}

Menjalankan Seeders

Setelah kita membuat file seeder, maka langkah selanjutnya adalah mengeksekusi file tersebut dengan mengunakan artisan command: php artisan db:seed. Secara default db:seed menjalankan class DatabaseSeeder. Maka apabila anda hanya ingin mengeksekusi class tertentu saja, maka anda dapat menggunakan flag --class.

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

seeding juga dapat dijalankan bersamaan dengan migrate, sebagai contoh anda melakukan refresh struktur database yang anda punya, maka secara otomatis dummy data akan di input kembali.

php artisan migrate:refresh --seed

Sampai disini kita telah berhasil membuat dummy data dengan menggunakan Seeders dan poin-poin yang akan kita capai telah kita bahas satu persatu. Sekian dulu pembahasan tentang seeder, semoga bermanfaat.