Gunakan database migration skema tabel, bangun Model CRUD dengan Query Builder, dan manfaatkan Entity di CodeIgniter 4.
Terakhir diperbarui:
In a nutshell: "Bab 3 mengajarkan pengelolaan skema database profesional menggunakan Migration, pembangunan Model CRUD berbasis Query Builder, serta pemanfaatan Entity untuk enkapsulasi data modern."
Direct Answer: Database Migration berfungsi sebagai sistem version control untuk skema database tim. Di CI4, Model menyediakan properti $allowedFields untuk mencegah Mass Assignment Vulnerability, sedangkan Entity memungkinkan manipulasi otomatis data (mutator/accessor) sebelum disimpan ke tabel.
Membuat Database Migration Skema Tabel Barang
Jalankan perintah Spark untuk membuat file migrasi skema tabel:
php spark make:migration CreateBarangTable
Buka file migrasi di app/Database/Migrations/xxxx_CreateBarangTable.php:
<?php
namespace App\Database\Migrations;
use CodeIgniter\Database\Migration;
class CreateBarangTable extends Migration
{
public function up()
{
$this->forge->addField([
'id' => [
'type' => 'INT',
'constraint' => 11,
'unsigned' => true,
'auto_increment' => true,
],
'kode_barang' => [
'type' => 'VARCHAR',
'constraint' => 50,
'unique' => true,
],
'nama_barang' => [
'type' => 'VARCHAR',
'constraint' => 255,
],
'kategori' => [
'type' => 'VARCHAR',
'constraint' => 100,
'default' => 'Umum',
],
'stok' => [
'type' => 'INT',
'constraint' => 11,
'default' => 0,
],
'harga_satuan' => [
'type' => 'DECIMAL',
'constraint' => '12,2',
'default' => 0.00,
],
'created_at' => [
'type' => 'DATETIME',
'null' => true,
],
'updated_at' => [
'type' => 'DATETIME',
'null' => true,
],
]);
$this->forge->addKey('id', true);
$this->forge->createTable('barang');
}
public function down()
{
$this->forge->dropTable('barang');
}
}
Jalankan migrasi ke database:
php spark migrate
Membuat Model & Entity CI4
Jalankan generator Spark untuk Model dan Entity:
php spark make:model BarangModel --entity BarangEntity
Konfigurasikan app/Models/BarangModel.php:
<?php
namespace App\Models;
use CodeIgniter\Model;
class BarangModel extends Model
{
protected $table = 'barang';
protected $primaryKey = 'id';
protected $useAutoIncrement = true;
protected $returnType = \App\Entities\BarangEntity::class;
protected $useSoftDeletes = false;
protected $protectFields = true;
protected $allowedFields = ['kode_barang', 'nama_barang', 'kategori', 'stok', 'harga_satuan'];
// Dates
protected $useTimestamps = true;
protected $dateFormat = 'datetime';
protected $createdField = 'created_at';
protected $updatedField = 'updated_at';
}
Tambahkan Business Logic di app/Entities/BarangEntity.php:
<?php
namespace App\Entities;
use CodeIgniter\Entity\Entity;
class BarangEntity extends Entity
{
protected $datamap = [];
protected $dates = ['created_at', 'updated_at'];
protected $casts = [
'stok' => 'integer',
'harga_satuan' => 'float',
];
// Method pembantu untuk format Rupiah
public function getHargaRupiah(): string
{
return 'Rp ' . number_format($this->attributes['harga_satuan'] ?? 0, 0, ',', '.');
}
}
Tips Pro CLI Seeding:
Gunakan php spark make:seeder BarangSeeder untuk mengisi data dummy pengujian dengan cepat tanpa perlu input manual di phpMyAdmin.