Membuat Migrasi (Migrations) Berdasarkan Pangkalan Data

Yugo
Laravel Indonesia
Published in
3 min readNov 12, 2016

Migrations itu penting. Ya, saya sudah mengimlementasikannya semenjak menggunakan CodeIgniter jauh sebelum fitur migrations dirilis resmi pada framework tersebut. Walau tidak dapat dijalankan pada level production, tetap saja migrations harus tetap dibuat setiap kali ada perubahan struktur pangkalan data. Selain untuk log dan arsip, migrations juga memudahkan developer ketika bekerja dalam sebuah tim.

Migrations are like version control for your database, allowing your team to easily modify and share the application’s database schema. Migrations are typically paired with Laravel’s schema builder to easily build your application’s database schema. If you have ever had to tell a teammate to manually add a column to their local database schema, you’ve faced the problem that database migrations solve.

Ketika mengembangkan aplikasi menggunakan Laravel, umumnya, untuk merancang sebuah pangkalan data beserta tabel di dalamnya, kita membuat cetak biru (blueprint) terlebih dahulu menggunakan tool tertentu, seperti MySQL Workbench misalnya. Kemudian, cetak biru tersebut dipindahkan ke dalam kode-kode khusus dalam bentuk migration. Selanjutnya, migrations tersebut dijalankan untuk mengeksekusi DDL (Data Definition Language) yang telah dibuat.

php artisan migrate

Namun, bagaimana jika posisinya pangkalan data sudah ada, tapi kita tetap ingin menggunakan migrations di dalam aplikasi?

Nah, package yang akan saya kenalkan berikut bisa jadi solusi kasus di atas.

Pangkalan Data

Sebagai contoh saya punya sebuah tabel bernama users dengan struktur sebagai berikut.

Struktur tabel user

Teks di atas cukup banyak memberikan data seputar tabel, seperti kolom yang tersedia, index, collation, dan lain sebagainya. Dari tabel yang sudah ada tersebut, saya ingin membuat berkas migration-nya hanya dengan satu kali pencet tombol Enter menggunakan package Xethron/migratons-generator.

Jalankan perintah-perintah di bawah pada command line interface untuk menginstal package.

$ composer require --dev --no-update "xethron/migrations-generator:dev-l5"
$ composer require --dev --no-update "way/generators:dev-feature/laravel-five-stable"
$ composer config repositories.repo-name git "git@github.com:jamisonvalenta/Laravel-4-Generators.git"
composer update

Buka berkas config/app.php dan tambahkan provider berikut.

Way\Generators\GeneratorsServiceProvider::class, Xethron\MigrationsGenerator\MigrationsGeneratorServiceProvider::class,

Pastikan juga kalian sudah mengatur konfigurasi pangkalan data pada berkas .env.

Yup, dilihat dari repositorinya, package Migrations Generator dari Xethron juga membutuhkan package lainya dengan nama Laravel 4 Generator.

Penggunaan

Package Migrations Generator dapat dijalankan melalui command line interface menggunakan artisan. Sebagai contoh, jika kita ingin membuat migrations dari seluruh tabel yang ada pada pangkalan data, dapat mengetikkan perintah berikut.

$ php artisan migrate:generate

Selain itu, kita juga dapat membuat migrations hanya pada tabel tertentu dengan mendefinisikan nama tabelnya atau mengabaikannya dengan opsi --ignore.

php artisan migrate:generate users,blog,pages php artisan migrate — ignore=”jobs,cache,migrations”php artisan migrate:generate users,blog,pagesphp artisan migrate — ignore=”jobs,cache,migrations”

Berdasarkan struktur tabel di atas, berikut isi berkas migrations yang telah dibuat menggunakan Migrations Generator. Berkas-berkas migrations tersebut terletak pada direktori database/migrations.

Berkas migration user

Terlihat dari berkas definisi kolom, index, dan seharusnya definisi foreign key (jika ada).

Laravel Migrations Generator will first generate all the tables, columns and indexes, and afterwards setup all the foreign key constraints. So make sure you include all the tables listed in the foreign keys so that they are present when the foreign keys are created.

Untuk memastikan migrations tersebut bisa dijalankan pada mesin lain, gunakan refresh untuk menjalankan migrations dari awal.

$ php atisan migrate:refresh

Perintah di atas akan menghapus semua tabel pada pangkalan data, kemudian membuat ulang berdasarkan definisi yang ada pada berkas migrations.

Sayangnya, hanya struktur tabel (migrations) yang dapat di-generate menggunakan migrations generator. Package tersebut tidak serta merta membuat berkas seed untuk generator data yang ada pada tabel.

--

--