Panduan Lengkap Membuat Laravel Migration (Database)
Jika kamu baru memulai dengan Laravel, kamu mungkin akan bertanya-tanya apa itu migrasi dan bagaimana cara membuat migrasi di Laravel. Pada dasarnya, migrasi adalah cara untuk mengatur skema database kamu secara programatik, dan Laravel membuatnya sangat mudah untuk dilakukan.
Dalam artikel ini, kami akan membahas langkah-langkah detail tentang cara membuat migrasi di Laravel, mulai dari definisi tabel hingga penambahan indeks dan kunci asing. Jadi, mari kita mulai!
Definisi Tabel
Pertama-tama, mari kita lihat bagaimana kamu bisa mendefinisikan tabel menggunakan migrasi di Laravel. Setiap migrasi memiliki metode up()
dan down()
yang digunakan untuk menentukan tindakan yang akan dilakukan ketika migrasi dijalankan atau di-rollback. Untuk membuat tabel, kita akan menggunakan metode up()
dan metode Schema::create()
.
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUsersTable extends Migration
{
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('users');
}
}
Kode di atas akan membuat tabel users
dengan kolom-kolom yang ditentukan. Kolom id()
adalah kolom kunci utama yang dihasilkan oleh Laravel secara otomatis. Kolom timestamps()
akan menambahkan kolom created_at
dan updated_at
secara otomatis.
Menambah Kolom
Jika kamu perlu menambahkan kolom ke tabel yang sudah ada, kamu bisa menggunakan metode Schema::table()
.
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddAgeToUsersTable extends Migration
{
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->integer('age');
});
}
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('age');
});
}
}
Kode di atas akan menambahkan kolom age
ke tabel users
. Metode down()
akan menghapus kolom age
dari tabel jika migrasi di-rollback.
Menghapus Kolom
Jika kamu perlu menghapus kolom dari tabel, kamu bisa menggunakan metode dropColumn()
.
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class RemoveAgeFromUsersTable extends Migration
{
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('age');
});
}
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->integer('age');
});
}
}
Kode di atas akan menghapus kolom age
dari tabel users
. Metode down()
akan menambahkan kolom age
ke tabel jika migrasi di-rollback.
Mengubah Kolom
Jika kamu perlu mengubah tipe data kolom yang sudah didefinisikan, kamu bisa menggunakan metode change()
.
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class ChangeEmailColumnInUsersTable extends Migration
{
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->string('email', 100)->change();
});
}
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->string('email')->change();
});
}
}
Kode di atas akan mengubah tipe data kolom email
menjadi string(100)
. Metode down()
akan mengubah kembali tipe data kolom email
ke string
.
Menambah Indeks
Jika kamu perlu menambahkan indeks ke kolom pada tabel, kamu bisa menggunakan metode index()
.
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddIndexToUsersTable extends Migration
{
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->index('email');
});
}
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropIndex('users_email_index');
});
}
}
Kode di atas akan menambahkan indeks pada kolom email
pada tabel users
. Metode down()
akan menghapus indeks dari kolom email
.
Menambah Kunci Asing (Foregin Key)
Jika Anda perlu menambahkan kunci asing ke tabel, kamu bisa menggunakan metode foreign()
.
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddForeignKeyToPostsTable extends Migration
{
public function up()
{
Schema::table('posts', function (Blueprint $table) {
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');
});
}
public function down()
{
Schema::table('posts', function (Blueprint $table) {
$table->dropForeign(['user_id']);
$table->dropColumn('user_id');
});
}
}
Kode di atas akan menambahkan kunci asing pada kolom user_id
pada tabel posts
yang merujuk pada kolom id
pada tabel users
. Metode down()
akan menghapus kunci asing dan kolom user_id
dari tabel posts
.
Menjalankan Migrasi
Setelah migrasi kamu sudah ditulis, kamu bisa menjalankannya dengan menggunakan perintah php artisan migrate
.
php artisan migrate
Perintah tersebut akan menjalankan semua migrasi yang belum dijalankan di dalam aplikasi Laravel.
Jika kamu perlu me-rollback migrasi terakhir, Anda dapat menggunakan perintah php artisan migrate:rollback
.
php artisan migrate:rollback
Perintah tersebut akan mengembalikan migrasi terakhir yang dijalankan. Jika kamu perlu mengembalikan lebih dari satu migrasi, kamu bisa menggunakan perintah php artisan migrate:rollback --step=2
, dengan nilai step
sesuai dengan jumlah migrasi yang perlu di-rollback.
Kesimpulan
Migrasi adalah cara yang sangat berguna untuk mengatur skema database kamu secara programatik. Dalam artikel ini, kita telah membahas langkah-langkah detail tentang cara membuat migrasi di Laravel, mulai dari definisi tabel hingga penambahan indeks dan kunci asing. kita juga membahas cara menjalankan dan melakukan rollback pada migrasi.
Dengan menggunakan migrasi, kamu bisa membuat dan mengelola skema database Anda dengan mudah, dan menghindari kesalahan saat menulis kueri SQL secara manual. Jadi, pastikan untuk memanfaatkan fitur ini dalam pengembangan aplikasi Laravel mu.