Memahami Laravel tentang Migration-nya - Dunia Laravel



Setelah kalian udah install laravel sama buat project baru. Sekarang kita coba buat persiapan pembuatan CRUD sederhana. Hal yang pertama dibuat adalah database.

Jadi di sini aku mau ngejelasin tentang pembuatan migration sebelum memulai CRUD.




Table of Contents

  • What is Migrations?
  • Why is Migrations?
  • Where is Migrations?
  • How to Use?
  • How to Create Migrations?
  • How to Edit Columns?
  • Set Foreign Key
  • What's Next?

What is Migrations?

Migrations adalah salah satu fitur pada laravel yang digunakan untuk membantu mengatur database. Kalian ga perlu masukin kolom satu per satu di table, kalian bisa langsung buat table melalui syntax yang udah disediain sama laravel. Migrations ini juga bisa dibilang sebagai version control untuk database. Fitur ini sangat membantu dalam pengerjaan collab (ngerjainnya ramean). Langsung aja kita coba yak, biar kalian bisa ngerasain sendiri.


Why is Migrations?

Pertama, migrations membantu kolaborasi antara programmer, dimana programmer tidak perlu saling berbagi file database (sql) setiap kali ada perubahan struktur database. Programmer hanya perlu me-running migration nya lagi dan database pun akan berubah. Sama juga kalo misalnya kita mau sering ganti laptop atau pc saat ngerjain proyek. Kita ga perlu kirim database (sql) setiap kali ganti laptop atau pc. Karena file migration ini disimpan dalam bentuk file php.

Kedua, migrations menjadi version control database, bisa digunakan untuk melihat kenangan masa lalu dari database yang kita buat hehe… Bukan gitu, digunakan untuk mengetahui perubahan versi database dari awal buat hingga sekarang.

Where is Migrations?

Tempat file migrations di laravel itu ada di {root_folder}/database/migrations/. Di awal pembuatan project, laravel udah buat 2 jenis file migrations. Yaitu create_user_table.php sama create_failed_jobs_table.php. file user_table nanti akan jadi table users kalo kalian jalanin migrations-nya. Table itu nanti juga digunakan sebagai table data users kalo kalian nanti mau buat Auth.


How to Use?


Pertama, kalian perlu buat database dulu di web server kalian. Kalo aku di sini pakenya XAMPP. Kalian bisa buat database nya lewat localhost aja.


Ingat, buat databasenya aja ya… kita ga perlu buat table nya dari situ juga. Kemudian kalian definisikan nama database kalian ke laravelnya, biar laravel tahu database yang mau di pake. Caranya dengan melengkapi kode pada file .env yang ada di folder root project kalian.


DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=db_dunia_laravel
DB_USERNAME=root
DB_PASSWORD=

Selanjutnya kalian bisa langsung coba jalanin perintah

php artisan migrate 

Pada cmd kalian yang udah kalian arahin ke folder project kalian. Jika kalian berhasil maka akan tampil message seperti ini.


Namun kadang akan ada error yang berbunyi “Syntax error or access violation:  1071 Specified key was too long; max key length is 767 bytes”. Ini bisa kalian atasi, caranya tinggal tambahin kode berikut yang mengatur panjang default string pada file AppServiceProvider.php di folder app/Providers/AppServiceProvider.php.

use Illuminate\Support\Facades\Schema; //ditambahkan di bagian atas

public function boot()
{
Schema::defaultStringLength(191); //ditambahkan di dalam function boot()
}

How to Create Migrations?


Kalian tadi udah jalanin migrations default dari laravel. Sekarang coba kita buat table sendiri kuy… Di sini nanti kita coba buat table namanya “materi” dan buat file migration namanya “create_materi_table”. Kalian bisa salah satu perintah dibawah ini.

php artisan make:migration create_materi_table
php artisan make:migration create_materi_table --create=materi

Bedanya perintah atas sama bawah itu, kalo yang atas itu kita buat file migration biasa. Kalo yang bawah itu kita udah definisiin nama table yang mau kita buat yaitu “materi”. Kalo udah di jalankan dan kalo sukses, nanti akan ada tulisan “Created Migration”.

File migration yang kalian buat akan muncul di folder yang sama kaya migration lainnya, yaitu di folder {root_folder}/database/migrations/ dengan nama yang udah kalian buat. Biasanya file migration yang baru dibuat itu akan ada di urutan paling bawah di daftar migration-nya.

Setelah kalian buka filenya, hal yang perlu kalian perhatikan adalah pada fungsi up(). Karena fungsi itu yang paling penting di migration ini, tempat mendefinisikan struktur table sama nama table nya.

    public function up()
    {
        Schema::create('materi', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

Di situ terapat ‘materi’ yang merupakan nama table yang akan kita buat. Dan di dalam kurung bracket, terdapat struktur default yang diberikan oleh laravel, yaitu kolom id sama kolom timestamps. Sekarang kita akan ubah struktur table nya menjadi struktur table yang kita inginkan.

    public function up()
    {
        Schema::create('materi', function (Blueprint $table) {
            $table->id();
            $table->string('judul');
            $table->string('pengarang');
            $table->string('jenis');
            $table->timestamps();
        });
    }

Kita buat simple aja dulu strukturnya… sekarang coba kita jalanin file migration ini. Caranya sama kaya sebelumnya pake perintah php artisan migrate.


Kalo sukses, hasilnya bisa di lihat di localhost database kalian. Maka akan tampil seperti gambar diatas, nama kolom beserta tipe datanya. Untuk macam-macam tipe data yang laravel sediakan, kalian bisa langsung aja cek dokumentasinya di website laravel sendiri, karena itu banyak banget hehe…


How to Edit Columns?


Habis kalian bisa buat migrations, sekarang kita coba edit table yang tadi udah kita buat pake migrations juga. Tapi sebelum  bisa edit kolom, kita perlu 1 dependencies yang harus kita install dulu di project kita. Cara installnya bisa melalui composer, yaitu dengan mengetikan syntax

composer require doctrine/dbal

pada cmd yang udah kalian arahin ke folder project kalian. Kemudian jika installnya udah selesai dan ada tulisan “successfully” artinya dependencies nya udah keinstall di project kalian.
Selanjutnya kita bisa mencoba mengedit kolom yang ada. Sama kaya buat table, kita buat migrations nya dulu. Pake perintah salah satu perintah dibawah ini


php artisan make:migration update_materi_table
php artisan make:migration update_materi_table --table=materi

Perintah diatas hampir sama kaya perintah buat table. Bedanya di sini kita ga pake create, kita pakenya table yang menandakan bahwa table yang kita tuju sebelumnya udah pernah dibuat.

    public function up()
    {
        Schema::table('materi', function(Blueprint $table){
            $table->string('deskripsi');
            $table->date('tgl_publish');
            $table->renameColumn('jenis','tipe');
        });
    }

Seperti biasa, kita definisikan struktur table di bagian fungsi up(). Kode di atas artinya kita mau nambahin kolom bernama ‘deskripsi’ dengan tipe data string, menambahkan kolom bernama ‘tgl_publish’ dengan tipe data date, dan mengubah nama kolom ‘jenis’ menjadi ‘tipe’ menggunakan perintah ->renameColumn(). Kemudian setelah menjalankan php artisan migrate, kalian bisa langsung liat hasilnya di localhost database kalian.


Dari gambar diatas bisa keliatan kalo ada 2 kolom tambahan di bagian bawah, dan kolom yang namanya awalnya ‘jenis’ diubah jadi ‘tipe’.

Terus jika kalian ngerasa salah buat kolom dan mau ngehapus kolom itu kalian bisa pake perintah ->dropColumn(‘nama_kolom’) yang juga kalian taruh di dalam fungsi up() dari migration.


Set Foreign Key

Sampe sekarang kita udah punya 2 table, yaitu users sama materi yang belum punya relasi diantara kedua table itu. Sekarang disini kita coba buat relasi antara kedua table itu. Namun perlu di ingat… syarat pembuatan relasi adalah ada kolom yang saling bersangkutan antara 1 table dengan table lainnya. Kolom yang dimaksud adalah kolom yang memiliki sifat Primary Key dan Foreign Key.


Ceritanya kita mau nyambungin table users sama materi. Tapi di sana belum ada kolom yang saling berkaitan. Maka dari itu kita harus menambahkan kolom terlebih dahulu pada table materi. 


        Schema::table('materi', function (Blueprint $table) {
            $table->unsignedBigInteger('user_id');

            $table->foreign('user_id')->references('id')->on('users');
        });

Penambahan kolom dengan sifat foreign key termasuk kedalam Edit Column. Sehingga migration yang dibuat tidak menggunkaan create. Dalam code diatas dilihat bahwa kita menambahkan kolom user_id dengan tipe data yang sesuai dengan primary key dari table users yaitu BigInteger.

Setelah kolom tersebut dibuat, maka kita bisa buat Foreign Key dari kolom itu. Kita bisa pake perintah foreign buat memilih kolom mana dari table saat ini yang mau di jadikan Foreign Key. Trus pake references untuk memilih kolom tujuan dan on untuk memilih table tujuan.

Kalo udah, tinggal kita jalanin perintah php artisan migrate lagi kaya biasa. Hasil relasi yang kebentuk bisa kalian lihat dari localhost database kalian. Caranya kalian buka database project kalian dulu, pilih tab ‘more’ kemudian pilih ‘designer’. Nanti akan tampil Skema Relasi dari database kalian.



Setelah kalian mencoba migration, sekarang coba kalia buka folder migration project kalian. Di sana kalian akan bisa ngelihat urutan perubahan database kalian dari yang awalnya Cuma ada table users sampe table materi. Itu yang namanya version control guys… Ditambah lagi jika kalian copy project ini ke device lain, kalian cuma perlu jalanin migration nya aja buat bikin databasenya. Itulah keuntungan penggunaan migration di laravel.

Penjelasanku diatas itu tentang perintah-perintah yang sering di pake pas ngerjain project. Tapi sebenernya perintahnya itu ada banyak banget yang bisa kalian lihat di dokumentasi laravel sendiri atau di artikel selanjutnya tentang daftar perintah migration laravel.




Lanjut ga nih guys? Masa ga kuy?
What’s Next?

Komentar

Postingan Populer