Database Seed – Migration di Laravel 5

Dalam artikel ini kita akan mencoba bagaimana membuat tabel dan mengisinya dengan beberapa data menggunakan database seed.
Migration dan Seed Doc
Untuk lebih memahami bagaimana database seed ini bekerja Anda bisa membaca dokumentasi resmi Laravel pada link diatas.
Kita bisa melakukan praktek ini menggunakan project sebelumnya.
Hal pertama yang perlu kita lakukan adalah melakukan konfigurasi database pada file database.php di direktori project/config/database.php
Selain pada file diatas, konfigurasi juga bisa dilakukan pada file project/.env.

...
DB_HOST=localhost
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
...

Untuk database MySQL setup variabelnya seperti contoh berikut (sesuaikan dengan database yang Anda gunakan).

'mysql' => [
			'driver'    => 'mysql',
			'host'      => env('DB_HOST', 'localhost'),
			'database'  => env('DB_DATABASE', 'nama_database'),
			'username'  => env('DB_USERNAME', 'root'),
			'password'  => env('DB_PASSWORD', ' '),
			'charset'   => 'utf8',
			'collation' => 'utf8_unicode_ci',
			'prefix'    => '',
			'strict'    => false,
		],

Sebelum membuat sebuah Migration kita perlu membuat tabel migration dalam database.
Beberapa perintah migrations:

migrate
migrate:install
migrate:refresh
migrate:reset
migrate:rollback
migrate:status

Pastikan database sudah siap atau sudah kita buat terlebih dahulu, lalu jalankan perintah php artisan migrate:install di command line.
Buat migration
Gunakan perintah php artisan make:migration create_pegawai_table untuk membuat migration baru untuk tabel pegawai.
Script diatas akan membuat file migration baru pada direktori project/database/migrations/####_##_##_######_create_pegawai_table.php
Buka file tersebut dan isikan code seperti berikut:

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreatePegawaiTable extends Migration {

	/**
	 * Run the migrations.
	 *
	 * @return void
	 */
	public function up()
	{
		Schema::create('pegawai', function(Blueprint $table)
		{
			$table->increments('id');

			$table->string('nama', 255);
            $table->string('email', 255);
            $table->integer('level');
            
			$table->timestamps();
		});
	}

	/**
	 * Reverse the migrations.
	 *
	 * @return void
	 */
	public function down()
	{
		Schema::drop('pegawai');
	}

}

Untuk mengeksekusi script diatas jalankan pada command line perintah php artisan migrate
Sekarang lihat database maka akan ada tabel baru yang siap untuk diisikan data. Untuk mengisikan data kita bisa mulai menggunakan fitur Seed di Laravel 5.0.
Direkomendasikan untuk menggunakan Eloquent karena kita akan menggunakannya untuk query. Jadi kita perlu membuat Eloquent Model yang akan kita beri nama Pegawai.
Jalankan di command line perintah php artisan make:model Pegawai
File model akan berada di direktori project/app/Pegawai.php, buka file Pegawai.php dan edit code menjadi seperti berikut:

<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class Pegawai extends Model {

	protected $fillable = ['nama', 'email', 'level'];

}

Buat file baru di direktori project/database/seeds/PegawaiTableSeeder.php
Isi dengan script code berikut:

<?php

use Illuminate\Database\Seeder;
use App\Pegawai as Pegawai;

class PegawaiTableSeeder extends Seeder {

	public function run() {
        // clear table
        Pegawai::truncate(); 
        // penambahan data 1
        Pegawai::create( [
            'nama'  => 'Firman Sidik Ginanjar' ,
            'email' => 'firman@salatigadev.com' ,
            'level' => '1' ,
        ] );
        // penambahan data 2
        Pegawai::create( [
            'nama'  => 'Firman' ,
            'email' => 'firmansg@gmail.com' ,
            'level' => '2' ,
        ] );
        // penambahan data 3
        Pegawai::create( [
            'nama'  => 'Firman SG' ,
            'email' => 'firman2008@ymail.com' ,
            'level' => '3' ,
        ] );
    }
}

Edit file DatabaseSeeder.php untuk memanggil PegawaiTableSeeder.php.

<?php

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

class DatabaseSeeder extends Seeder {

	/**
	 * Run the database seeds.
	 *
	 * @return void
	 */
	public function run()
	{
		Model::unguard();

		// $this->call('UserTableSeeder');
		$this->call('PegawaiTableSeeder');
	}

}

Diperlukan untuk meng-update Class autoload list karena kita menambahkan 2 file class baru(PegawaiTableSeeder, Pegawai) dengan menjalankan perintah composer dump-autoload.
Kemudian terakhir kita bisa melakukan seeding data ke database dengan menjalankan perintah php artisan db:seed.
Cek database atau jalankan project di localhost, maka data sudah ditambahkan.

Sekian tutorial Programming Laravel kali ini, semoga bermanfaat. #HappyCoding

You may also like...

3 Responses

  1. Ara says:

    Terima kasih tutorialnya sangat membantu dan mudah diikuti. Saya mencoba tutorial ini dng laravel 5.1.4 (versi terbaru saat komentar ini saya tulis), dan muncul peringatan pada tahap “seed” bahwa tabel tidak diketemukan. Setelah dicermati ternyata secara default “seed” menambahkan huruf “s” (jamak/plural) pada tabel yang akan diolah. Jadi agar lancar dari awal tahapan nama tabel saya ubah dari “pegawai” menjadi “pegawais”. 🙂

    • admin says:

      kasus diatas juga pernah kami alami, penyebabnya bisa jadi ketika mengeksekusi file migration, maka ada penambahan file migration baru(dengan tambahan “s”) secara otomatis pada folder nama_project/database/migrations (silahkan dicek dl). bisa dicoba hapus dahulu file migration yang baru itu, baru lakukan eksekusi..semoga membantu.. 🙂

  2. rudi says:

    terimaksih mas.. sagat membantu… tutorialnya ini sagat bermanfaat.. semoga lbh berkah..amin..

Leave a Reply

Your email address will not be published. Required fields are marked *