Belajar Laravel (Chapter 7 | Tutorial Database: Migrations)

Tobi Ahmad
dotlocal
Published in
4 min readApr 10, 2020

Untuk memulai membuat table biasanya menggunakan SQL query, tapi pada Laravel kita bisa menggunakan Migrations. Fitur ini tidak wajib digunakan ya, namun dengan menggunakan migrations kita dimudahkan dalam

  • Menentukan struktur table
  • Struktur dapat disimpan dalam Git
  • Dapat membuat perubahan struktur table seperti penambahan, pengurangan dan menghapus table
  • Mudah dalam kolaborasi pembuatan table, sehingga table akan tetap sama ketika terdapat banyak tim salam satu project.

Scope of This Chapter

Pada tutorial ini kita akan membahas tentang Database: Migrations pada Laravel 7.x dan contoh penggunaanya.

Laravel Migrations

Pada laravel, migrations tersimpan di folder /database/migrations. Migrations dibuat dengan menggunakan Artisan Command.

php artisan migrate:install
//Migration table created successfully.

Perintah ini digunakan untuk membuat migration table pada database, table ini digunakan sebagai history migrations yang telah dibuat. Perintah ini bisa diskip, karena table migrations akan otomatis dibuat saat pertama kali menjalankan perintah artisan migrate.

Apabila kita run perintah migrate:install maka pada database akan bertambah 1 table yang namanya migrations.

Membuat Migrations

Untuk membuat migration gunakan perintah make:migration. Masuk ke folder project, dan jalankan perintah

php artisan make:migration create_news_table

Ada opsi — table dan — create,
opsi — create=news digunakan untuk membuat migrations dengan nama table news,
opsi — table=news digunakan untuk memodifikasi dengan table news. Jalankan perintah berikut untuk mencobanya:

php artisan make:migration create_newsxxx_table --create=news
// membuat migrations dengan nama table news
php artisan make:migration add_category_to_newsxx_table --table=news
// menambah field pada table news

Nama table pada migrations juga bisa mengikuti perintah artisan yang dibuat seperti:

php artisan make:migration create_news_table
// membuat migrations dengan nama table news
php artisan make:migration add_category_to_news_table
// menambah field pada table news

Struktur Migration

<?phpuse Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateNewsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create(‘news’, function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists(‘news’);
}
}

Pada class migration terdapat dua method: up() dan down()

up() : method yang digunakan untuk membuat table, columns atau indexes di database kita saat migration di jalankan.

down() : method yang akan mengembalikan perintah yang dijalankan oleh method up() ketika ada perintah rollback, seperti menghapus table.

Eksekusi Migrations

php artisan migrate//Migrating: 2014_10_12_000000_create_users_table
//Migrated: 2014_10_12_000000_create_users_table (0.3 seconds)
//Migrating: 2019_08_19_000000_create_failed_jobs_table
//Migrated: 2019_08_19_000000_create_failed_jobs_table (0.16 seconds)
//Migrating: 2020_04_10_084008_create_news_table
//Migrated: 2020_04_10_084008_create_news_table (0.16 seconds)

Perintah diatas untuk mengeksekusi semua migrations yang telah dibuat. Mari kita lihat databasenya, terdapat table bawaan dari Laravel dan table news yang kita buat diawal.

Kemudian tambah migration untuk table category dan jalankan perintah migrate

php artisan make:migration create_category_table
// Created Migration: 2020_04_10_084311_create_category_table
php artisan migrate
// Migrating: 2020_04_10_084311_create_category_table
// Migrated: 2020_04_10_084311_create_category_table (0.23 seconds)

Rolling Back Migrations

Roll back migrations menggunakan perintah artisan migrate:rollback,
perintah ini akan mengembalikan/rollback pada “batch” terakhir dari migration, bisa untuk beberapa file migrations.

Buka table migrations pada database MySQL

Pada table migrations terdapat field “batch”, dan pada record terakhir ada file migration untuk table category.

Jalankan perintah migrate:rollback

php artisan migrate:rollback
//Rolling back: 2020_04_10_084311_create_category_table
//Rolled back: 2020_04_10_084311_create_category_table (0.18 seconds)

Maka yang terhapus adalah table category.

Kita juga bisa roll back beberapa file migration dengan menggunakan option — step. Misalkan kita akan menghapus 2 file migrations terakhir, menggunakan perintah berikut:

php artisan migrate:rollback --step=2// Rolling back: 2020_04_10_084311_create_category_table
// Rolled back: 2020_04_10_084311_create_category_table (0.25 seconds)
// Rolling back: 2020_04_10_084008_create_news_table
// Rolled back: 2020_04_10_084008_create_news_table (0.39 seconds)

Roll back semua migrations

Untuk roll back semua file migrations menggunakan perintah :

php artisan migrate:reset
// Rolling back: 2020_04_10_084311_create_category_table
// Rolled back: 2020_04_10_084311_create_category_table (0.21 seconds)
// Rolling back: 2020_04_10_084008_create_news_table
// Rolled back: 2020_04_10_084008_create_news_table (0.36 seconds)
// Rolling back: 2019_08_19_000000_create_failed_jobs_table
// Rolled back: 2019_08_19_000000_create_failed_jobs_table (0.24 seconds)
// Rolling back: 2014_10_12_000000_create_users_table
// Rolled back: 2014_10_12_000000_create_users_table (0.23 seconds)

Roll Back & Migrate Secara bersamaan


php artisan migrate:refresh
//roll back dan migrate pada 2 file terakhir menggunakan option step
php artisan migrate:refresh — step=2

Refresh & run all database seed


php artisan migrate:refresh — seed

Drop all tables and re-run all migrations


php artisan migrate:fresh

Drop all tables and re-run all migrations with seed


php artisan migrate:fresh — seed

Migrations Status

php artisan migrate:status
+------+--------------------------------------------+-------+
| Ran? | Migration | Batch |
+------+--------------------------------------------+-------+
| Yes | 2014_10_12_000000_create_users_table | 1 |
| Yes | 2019_08_19_000000_create_failed_jobs_table | 1 |
| Yes | 2020_04_10_084008_create_news_table | 1 |
| Yes | 2020_04_10_084311_create_category_table | 1 |
+------+--------------------------------------------+-------+

Next Chapter

Database: Seeding : https://medium.com/dotlocal/belajar-laravel-chapter-8-tutorial-database-seeding-7cffc3aaeefe

Support the Author

Jika suka dengan artikel ini, bisa support saya ditautan berikut ini https://karyakarsa.com/tobidsn :)

Cheers
Tobi Ahmad
Founder of Dot Local

--

--

Tobi Ahmad
dotlocal

Web Developer, Blogger, & Open source enthusiast.