Generate Kode Otomatis di Laravel

Cara generate kode otomatis di Laravel dengan format tertentu

Contoh: BR0001, BR0002, dst

public function generateKode()
{
    $lastRecord = Barang::orderBy('id', 'desc')->first();

    $lastKode = ($lastRecord) ? intval(substr($lastRecord->kode, 2)) : 0;
    $nextNumber = $lastKode + 1;
    $formattedNumber = str_pad($nextNumber, 4, '0', STR_PAD_LEFT);
    $newKode = 'BR' . $formattedNumber;

    return $newKode;
}
  • $lastRecord adalah data terakhir dari database barang
  • $lastKode untuk mengambil kode terakhir, jika $lastRecord kosong, maka $lastKode nya di set ke 0
  • substr($lastRecord->kode, 2) untuk mengambil string mulai dari index ke-2, karena contohnya adalah BR0001 dan diawal string ada 2 karakter yang non-numerik, maka menggunakan substr dengan index 2
  • Setelah di substr maka hasilnya adalah 0001 jadi digunakan intval untuk mengkonversinya kedalam integer value
  • str_pad($nextNumber, 4, '0', STR_PAD_LEFT) untuk menambahkan karakter 0 sampai sebanyak 4 karakter dan tambahkannya di bagian kiri, sehingga hasilnya 0002, 0011, dst
  • Hasil dari $formattedNumber lalu ditambahkan awalan BR
  • Kode baru tersebut yang akan di return

Contoh pemanggilannya

$kode = $this->generateKode();

Contoh lain untuk generate invoice dengan format berikut

No invoice: TRX/2024/Feb/0001, TRX/2024/Mar/0002, dst

public function generateKode()
{
    $year = now()->year;
    $month = now()->format('M');

    $lastPenjualan = Penjualan::whereMonth('created_at', now()->month)
        ->orderBy('id', 'DESC')
        ->first();

    $lastNumber = 1;
    if ($lastPenjualan) {
        $lastNumber = intval(substr($lastPenjualan->kode, -4)) + 1;
    }

    $lastKode = sprintf('%04d', $lastNumber);

    $kode = "PJ/{$year}/{$month}/{$lastKode}";

    return $kode;
}
  • sprintf untuk padding string 4 karakter dengan isian angka 0
  • Misal angka 1 -> 0001, 2 -> 0002, 14 -> 0014, dst
  • substr($lastPenjualan->kode, -4) digunakan untuk mengambil 4 digit dari paling belakang