Halo, Sobat Jagoan! Artikel kali ini akan mengajak kamu untuk mengenal dan memahami migrasi database dan seeder pada CodeIgniter 4. Setelah kamu paham, akan dilanjutkan dengan membuat migrasi database dan seeder pada CodeIgniter 4. Cuss, simak penjelasan di bawah ini.
Apa itu Migrasi Database?
Dalam konteks database, migrasi berarti perpindahan database dari suatu tempat ke tempat yang lain, misalnya database di localhost ke server production. Migrasi dapat membantu kinerja tim dalam membangun sebuah aplikasi karena memudahkan sinkronisasi perubahan database.
Bayangkan kamu terlibat dalam tim proyek, lalu kamu melakukan perubahan skema database maka tim yang lain juga harus mengikuti. Mau tidak mau, kamu harus meng-export skema di komputer kamu dan memberikan ke semua anggota tim secara manual. Belum lagi, jika mereka juga melakukan revisi pada skema tersebut. butuh berapa kali mengirim satu per satu sampai menemukan skema yang pasti. Nah, ini bisa menghambat waktu, karena itu kamu membutuhkan migrasi database supaya bisa menyimpan perubahan secara efisien.
Migrasi Database di CodeIgniter
Apabila kamu pernah menggunakan CodeIgniter 3, migrasi database dilakukan dengan class CI_Migration, lalu memanggil class tersebut di Controller.
Pada CodeIgniter 4, sudah disediakan perintah khusus yaitu spark. Kamu bisa melihat perintah-perintah beserta deskripsinya yang disediakan oleh spark melalui terminal dengan menjalankan perintah:
php spark list
Dari perintah-perintah tersebut artikel kali ini akan menggunakan perintah yang berada di kelompok Database dan beberapa di kelompok Generators untuk membuat migrasi dan seeder database.


Berikut ini penjelasan beberapa perintah yang berkaitan dengan database:
- db:create untuk membuat database baru
- db:table untuk melihat informasi tabel
- db:seed untuk membuat data awal (benih data)
- migrate untuk melakukan migrasi (menjalankan method up())
- make:migration untuk membuat file migrasi
- migrate:refresh untuk melakukan rollback dan melakukan migrasi perubahan terbaru
- migrate:rollback untuk melakukan rollback pada versi tertentu (menjalankan method down())
- migrate:status untuk melihat status migrasi
- make:seeder untuk membuat file seeder
Nah, kalau kamu ingin mendapatkan keterangan spesifik mengenai suatu perintah spark kamu bisa menjalankan perintah: php spark help <command_name>
Contoh: php spark help make:migration
Membuat Migrasi Database dengan CodeIgnitier 4
Sekarang, yuk mulai mengimplementasikan cara membuat migrasi database. Sebelum memulai, pastikan kamu sudah membuat proyek CodeIgniter 4 di lokal ya, Sob seperti cara di artikel Tutorial Menggunakan CodeIgniter 4
STEP 1: Buat database bernama db_employee di phpMyAdmin

ATAU kamu bisa membuat melalui terminal menggunakan perintah:
php spark db:create db_employee
STEP 2: Setelah membuat database, selanjutnya atur konfigruasi database dengan mer-rename file env menjadi .env (menambah titik di depan) kemudian edit bagian database seperti berikut:
#--------------------------------------------------------------------
# DATABASE
#--------------------------------------------------------------------
database.default.hostname = localhost
database.default.database = db_employee
database.default.username = root
database.default.password =
database.default.DBDriver = MySQLi
database.default.DBPrefix =
database.default.port = 3306
Pastikan kamu sesuaikan bagian username dan password dengan database kamu supaya aplikasi bisa terhubung dengan sever database.
STEP 3: Struktur tabel yang akan dibuat seperti berikut.
- Tabel departemen menampung data divisi atau bagian kerja
- Tabel jabatan berisi jabatan karyawan yang ada di perusahaan
- Tabel karyawan berisi data karyawan yang memiliki relasi ke departemen dan jabatan

Pada langkah pertama, akan fokus pada tabel departemen dulu, lalu jalankan perintah berikut untuk membuat file migrasi.
php spark make:migration departemen
Perintah ini akan membuat file baru bernama xxxx_xx_xx_xxxxxx_departemen.php di dalam folder app/Database/Migration/

Pada kode di atas, terdapat class Departemen yang merupakan turunan dari class Migration. Terdapat 2 method di dalam class Departemen yaitu
- up() akan dijalankan saaat melakuakn migrasi
- down() berfungsi ketika melakukan rollback
STEP 4: Setelah itu, buat skema untuk tabel departemen menjadi seperti berikut:
forge->addField([
'id' => [
'type' => 'INT',
'auto_increment' => true,
'unsigned' => true
],
'nama_departemen' => [
'type' => 'VARCHAR',
'constraint' => 100
],
'created_at' => [
'type' => 'DATETIME',
'null' => true
],
'updated_at' => [
'type' => 'DATETIME',
'null' => true
]
]);
$this->forge->addKey('id', true); // primary key
$this->forge->createTable('departemen');
}
public function down()
{
$this->forge->dropTable('departemen');
}
}
- $this->forge->addKey(‘id’, true); menandakan bahwa kolom id adalah primary key
- $this->forge->createTable(‘departemen’); bagian ini akan membuat tabel dengan nama departemen
- $this->forge->dropTable(‘departemen’); menghapus tabel jika kamu menjalankan perintah rollback
STEP 5: Setelah itu jalankan perintah migrasi untuk membuat tabel di database sesuai skema yang telah didefinisikan sebelumnya, dengan perintah:
php spark migrate
STEP 6: Buka phpMyAdmin dan lihat sekarang sudah ada tabel baru yaitu migrations dan departemen. Tabel migrations adalah tabel yang otomatis dibuat untuk menyimpan versi migrasi yang sudah dilakukan. Lalu, tabel departemen adalah tabel yang sudah kamu buat berdasarkan file migrasi pada STEP 4.

STEP 7: Kamu bisa mengulangi langkah yang sama untuk membuat migrasi tabel jabatan lalu tabel karyawan. Perlu kamu ketahui karena tabel karyawan mereferensi id di tabel departemen dan jabatan. Maka tabel karyawan harus dibuat setelah tabel departemen dan karyawan ada, ini supaya tidak error, Sob.
- Skema tabel jabatan
forge->addField([
'id' => [
'type' => 'INT',
'auto_increment' => true,
'unsigned' => true
],
'nama_jabatan' => [
'type' => 'VARCHAR',
'constraint' => 100
],
'created_at' => [
'type' => 'DATETIME',
'null' => true
],
'updated_at' => [
'type' => 'DATETIME',
'null' => true
]
]);
$this->forge->addKey('id', true); // primary key
$this->forge->createTable('jabatan');
}
public function down()
{
$this->forge->dropTable('jabatan');
}
}
- Skema tabel karyawan
forge->addField([
'id' => [
'type' => 'INT',
'auto_increment' => true,
'unsigned' => true
],
'nama' => [
'type' => 'VARCHAR',
'constraint' => 100
],
'email' => [
'type' => 'VARCHAR',
'constraint' => 100,
'unique' => true
],
'telepon' => [
'type' => 'VARCHAR',
'constraint' => 20,
'null' => true
],
'tanggal_masuk' => [
'type' => 'DATE',
'null' => true
],
'departemen_id' => [
'type' => 'INT',
'unsigned' => true
],
'jabatan_id' => [
'type' => 'INT',
'unsigned' => true
],
'created_at' => [
'type' => 'DATETIME',
'null' => true
],
'updated_at' => [
'type' => 'DATETIME',
'null' => true
]
]);
$this->forge->addKey('id', true);
// Tambahkan foreign key
$this->forge->addForeignKey('departemen_id', 'departemen', 'id', 'CASCADE', 'CASCADE');
$this->forge->addForeignKey('jabatan_id', 'jabatan', 'id', 'CASCADE', 'CASCADE');
$this->forge->createTable('karyawan');
}
public function down()
{
$this->forge->dropTable('karyawan');
}
}
Membuat Seeder Database
Setelah kamu berhasil membuat dan memahami migrasi database menggunakan studi kasus tabel departemen. Berikutnya, akan mengisi tabel tersebut menggunakan fitur seeder database. Seeder cocok dipakai untuk mengisi data awal, misalnya untuk keperluan testing.
Apa Seeder itu?
Seeder adalah fitur di CodeIgniter 4 yang digunakan untuk mengisi data ke dalam tabel database secara otomatis menggunakan perintah spark. Teknik seeder ini biasanya digunakan untuk mengisi data dummy untuk keperluan pengembangan aplikasi.
STEP 1: Jalankan perintah berikut untuk membuat seeder tabel departemen di terminal. Hasilnya akan membuat file di app/Database/Seeds/DepartemenSeeder.php
php spark make:seeder DepartemenSeeder
STEP 2: Buka file DepartemenSeeder.php dan ubah filenya menjadi seperti ini:
'HRD'],
['nama_departemen' => 'Keuangan'],
['nama_departemen' => 'IT'],
['nama_departemen' => 'Marketing'],
['nama_departemen' => 'Produksi'],
];
// Insert semua data sekaligus
$this->db->table('departemen')->insertBatch($data);
}
}
- insertBatch() digunakan untuk menyisipkan banyak data sekaligus
STEP 3: Di terminal, jalankan perintah berikut untuk menjalankan seeder.
php spark db:seed DepartemenSeeder
STEP 4: Setelah menjalankan perintah seeder, buka phpMyAdmin dan sekarang tabel departemen kamu berisi data dummy yang sudah dibuat menggunakan seeder.

Selanjutnya, kamu bisa mempraktikkan secara mandiri seeder untuk tabel jabatan dan karyawan dengan cara yang serupa.
Tambahan
FYI, kamu juga bisa menggunakan faker (seperti di Laravel) untuk mengisi data dummy. Faker adalah library untuk menghasilkan data dummy atau data palsu secara otomatis. Langkah-langkahnya seperti berikut:
STEP 1: Buka terminal di root proyek CodeIgniter kamu, lalu jalankan:
composer require fakerphp/faker

Perintah di atas akan mengaktifkan library faker php di file composer.json.
STEP 2: Pastikan kamu sudah membuat migrasi tabel Jabatan kemudian buat file seeder, ambil kasus mengisi data jabatan sebanyak 5 data acak.
php spark make:seeder JabatanSeeder
STEP 3: Setelah itu, buka file app/Database/Seeds/JabatanSeeder.php dan ubah isinya menjadi seperti berikut:
$faker->jobTitle // Faker: nama jabatan
];
$this->db->table('jabatan')->insert($data);
}
}
}
- \Faker\Factory::create(); berfungsi mengaktifkan Faker
- $faker->jobTitle akan menghasilkan nama jabatan acak
STEP 4: Setelah itu jalankan perintah seeder untuk mengisi tabel jabatan secara otomatis menggunakan faker.
php spark db:seed JabatanSeeder

Demikian artikel tentang migrasi dan seeder pada CodeIgniter ini dibuat. Semoga membantu memudahkan kamu dalam membangun aplikasi, Sob.
Kalau ada yang masih bikin bingung, jangan ragu hubungi Tim Support Jagoan Hosting melalui Open Ticket, Sob!
Hai, Sobat Jagoan! Softaculous adalah fitur auto-installer yang biasanya tersedia di cPanel dan digunakan untuk memasang berbagai aplikasi web secara Read more
Hai, Sobat Jagoan! Saat kamu mengembangkan proyek CodeIgniter, menggunakan Composer adalah langkah terbaik. Selain mendapatkan versi resmi terbaru, kamu juga Read more
Halo, Sobat! Remote repository adalah tempat penyimpanan proyek kamu di server Git yang bisa diakses dari mana saja melalui internet. Read more
Hai, Sobat Jagoan! Sebelum nyemplung lebih jauh dengan CodeIgniter versi 4, kamu perlu mengenal dan memahami konsep dasar CodeIgniter 4 Read more