Belajar Laravel (Chapter 7 | Tutorial Database: Migrations)
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 newsphp 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 newsphp 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_tablephp 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