Sebelum memulai praktik, pastikan Anda telah memahami konsep dasar pada materi kelas Mastering CodeIgniter 4 di infokoding.

BAB 3

Mastering CodeIgniter 4 Bab 3: Bekerja dengan Database, Migration & Model CRUD

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.