Tanggal :15 Juli 2020
Migration Codeigniter 4

Mengganti Migration Codeigniter 4

Assalamualaikum Warohmatulloh Wabarokatuh, beberapa waktu lalu saya sempat menulis beberapa tutorial tentang Codeigniter 4. Tapi saya putuskan berhenti melanjutkan tulisannya ketika saya mau menulis tentang migration. Kenapa? karena migration Codeigniter 4 ini menurut saya aneh sekali. Kenapa? Karena tidak disertai dengan perintah untuk membuat file migrationnya. Harus secara manual dan nggak praktis menurut saya Tidak seperti migration di Laravel.

Entah apa yang jadi pertimbangannya, mungkin karena mereka ingin less dependency gitu ya? saya juga kurang tahu. Yang pasti menurut saya ini adalah hal yang cukup mengecewakan dari penantian yang sangat lama untuk Codeigniter 4.

Jadi saya akan menginstal sebuah libray untuk melakukan migration di proyek Codeigniter 4. Sebenarnya library ini bisa digunakan di proyek apapun selain Codeigniter 4. Tapi, berhubung biar artikelnya rame dan kebetulan saya kecewa dengan migration di Codeigniter 4. Maka saya putuskan untuk membahas bareng dengan Codeigniter 4.

Mengganti Migration Codeigniter 4 dengan Phinx

Sebenarnya sudah lama sekali saya pernah menggunakan library ini untuk membuat migration. Waktu itu di Codeigniter 2 / 3 kalau tidak salah, kemudian di sebuah framework yang dibuat oleh senior di kantor waktu itu.

Nama librarynya adalah Phinx, waktu saya menulis artikel ini dokumentasi dari Phinx ini dialihkan ke cookbook dari CakePHP. Sepertinya dulu ada halaman dokumentasinya sendiri.

Menginstal Phinx

Pertama, kita akan instal Phinx ke proyek kita menggunakan composer.

composer require robmorgan/phinx

Setelah proses instalasi selesai, kita inisasi Phinx dengan perintah di bawah ini.

vendor/bin/phinx init

Ketika perintah dijalankan akan membuat sebuah file untuk konfigurasi Phinx pada root folder proyek dengan nama phinx.yml. Isinya seperti ini.

paths:
    migrations: '%%PHINX_CONFIG_DIR%%/db/migrations'
    seeds: '%%PHINX_CONFIG_DIR%%/db/seeds'

environments:
    default_migration_table: phinxlog
    default_environment: development
    production:
        adapter: mysql
        host: localhost
        name: production_db
        user: root
        pass: ''
        port: 3306
        charset: utf8

    development:
        adapter: mysql
        host: localhost
        name: development_db
        user: root
        pass: ''
        port: 3306
        charset: utf8

    testing:
        adapter: mysql
        host: localhost
        name: testing_db
        user: root
        pass: ''
        port: 3306
        charset: utf8

version_order: creation

Kemudian buatlah folder db/migrations atau sesuai dengan yang ada bagian paths di file konfigurasi.

Menulis Migrations

Untuk membuat file migration dengan Phinx kita bisa gunakan perintah create. Contoh :

vendor/bin/phinx create CreateUsersTable

Perintah di atas akan membuat sebuah file migration dengan nama YYYYMMDDHHMMSS_create_users_table.php. Kemudian Phinx akan membuat sebuah skeleton untuk migration dengan sebuah method change.

Sejak versi 0.2.0, Phinx mengenalkan sebuah fitur yang dinamakan reversible migration. Kalau artinya di bahasa Indonesia adalah migration yang bisa dibalik. Gimana gimana? wkwk Jadi gampangnya kita cuma mendefinisikan migration kita untuk perintah membuat tabel saja (up) pada method change. Ketika kita ingin rollback Phinx secara otomatis bisa mengerti bagaimana melakukan down atau rollback.

Perintah perintah yang bisa di reverse oleh Phinx :

  • createTable
  • renameTable
  • addColumn
  • renameColumn
  • addIndex
  • addForeignKey
<?php

use Phinx\Migration\AbstractMigration;

class CreateUsersTable extends AbstractMigration
{
    /**
     * Change Method.
     *
     * Write your reversible migrations using this method.
     *
     * More information on writing migrations is available here:
     * https://book.cakephp.org/phinx/0/en/migrations.html
     *
     * The following commands can be used in this method and Phinx will
     * automatically reverse them when rolling back:
     *
     *    createTable
     *    renameTable
     *    addColumn
     *    addCustomColumn
     *    renameColumn
     *    addIndex
     *    addForeignKey
     *
     * Any other destructive changes will result in an error when trying to
     * rollback the migration.
     *
     * Remember to call "create()" or "update()" and NOT "save()" when working
     * with the Table class.
     */
    public function change()
    {

    }
}

Untuk membuat tabel dengan Phinx itu cukup mudah dengan menggunakan objek Table. Ini contoh cara membuat tabel di Phinx.

<?php

use Phinx\Migration\AbstractMigration;

class CreateUsersTable extends AbstractMigration
{
    public function change()
    {
        $users = $this->table('users');
        $users->addColumn('username', 'string', ['limit' => 20])
              ->addColumn('password', 'string', ['limit' => 40])
              ->addColumn('email', 'string', ['limit' => 100])
              ->addColumn('first_name', 'string', ['limit' => 30])
              ->addColumn('last_name', 'string', ['limit' => 30])
              ->addColumn('created', 'datetime')
              ->addColumn('updated', 'datetime', ['null' => true])
              ->addIndex(['username', 'email'], ['unique' => true])
              ->create();
    }
}

Dan ini adalah tipe kolom yang valid di Phinx :

  • biginteger
  • binary
  • boolean
  • date
  • datetime
  • decimal
  • float
  • double
  • integer
  • smallinteger
  • string
  • text
  • time
  • timestamp
  • uuid

Menjalankan Migration

Untuk menjalankan migration di Phinx gunakan perintah migrate dan tentukan environmentnya.

vendor/bin/phinx migrate -e development

Secara otomatis akan menjalankan semua migrations. Jika ingin menjalankan migraiton yang spesifik gunakan --target atau -t untuk lebih singkat.

vendor/bin/phinx migrate -e development -t 20110103081132

Rollback Migration

Untuk melakukan membatalkan migration yang pernah dijalankan. Gunakan rollback.

 vendor/bin/phinx rollback -e development

Untuk melakukan rollback secara spesifik, gunakan --target atau -t.

vendor/bin/phinx rollback -e development -t 20120103083322

Atau kita bisa menjalankan rollback sesuai dengan tanggal yang diinginkan menggunakan --date atau -d.

vendor/bin/phinx rollback -e development -d 2012
vendor/bin/phinx rollback -e development -d 201201
vendor/bin/phinx rollback -e development -d 20120103
vendor/bin/phinx rollback -e development -d 2012010312
vendor/bin/phinx rollback -e development -d 201201031205
vendor/bin/phinx rollback -e development -d 20120103120530

Nah kurang lebih itu sedikit gambaran tentang Phinx yang bisa kawan-kawan gunakan untuk menggantikan migration Codeigniter 4 yang menyebalkan 😛 (Fans CI yang baca ga usah baper).

Wassalamualaikum Warohmatulloh Wabarokatuh.

Hi Saya Amirul, Saya mengajarkan koding melalui screencast di Kawan Koding, saya juga menulis Artikel di Kawan Koding.

3 Comments

  1. Wildan Fuady Reply

    Wa’alaikum salam. Codeigniter 4 sudah menyediakan fitur untuk membuat migration baru mas. Perintahnya php spark migrate:create users.

    Lalu setelah bikin column dan table tinggal di migrate dengan perintah php spark migrate.

    Semoga membantu.

    Sahabatmu …

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *