1. Laravel
  2. PHP

Membuat kode otomatis di Laravel

Pada artikel kali ini kita akan membahas bagaimana membuat kode otomatis menggunakan Laravel. Kode otomatis disini adalah sebuah kode yang mengandung format tertentu, misalnya nomor invoice 2019.11.27/INV/0001.

2019.11.27Tanggal pembuatan invoice dalam format Y.m.d
INVKode perihal
0001Urutan transaksi yang terjadi pada tanggal tersebut

AutoNumber package

Untuk membuat kode otomatis menggunakan Laravel, pada tutorial kali ini kita akan menggunakan sebuah package yaitu AutoNumber.

Instalasi

Kita bisa menginstal package ini dengan perintah composer.

composer require alfa6661/laravel-autonumber

Setelah itu, daftarkan package service provider pada file config/app.php.

'providers' => [
    // ...
    Alfa6661\AutoNumber\AutoNumberServiceProvider::class,
],

Publish config dan migration yang ada pada package ini.

php artisan vendor:publish --provider='Alfa6661\AutoNumber\AutoNumberServiceProvider'

Karena dalam package ini terdapat sebuah migration untuk membuat sebuah table, maka jalankan juga perintah migrate untuk membuat table tersebut.

php artisan migrate

Penggunaan

Untuk konfigurasi AutoNumber ada beberapa langkah yang harus kita gunakan pada model yang akan kita gunakan. Model yang akan kita gunakan harus mengimport sebuah trait yang sudah disediakan pada package ini Alfa6661\AutoNumber\AutoNumberTrait. Trait ini juga mengandung sebuah abstract method getAutoNumberOptions untuk mendefinisikan pengaturan format kode dan kolom yang mana yang akan kita gunakan untuk menyimpan kode otomatis ini, sehingga kita harus mengimplementasikan method ini pada model yang kita gunakan secara manual.

Contoh

use Alfa6661\AutoNumber\AutoNumberTrait;
    
class Order extends Model
{
    use AutoNumberTrait;
    
    /**
     * Return the autonumber configuration array for this model.
     *
     * @return array
     */
    public function getAutoNumberOptions()
    {
        return [
            'code' => [
                'format' => 'SO.?', // Format kode yang akan digunakan.
                'length' => 5 // Jumlah digit yang akan digunakan sebagai nomor urut
            ]
        ];
    }
}
codeKolom pada database yang digunakan untuk menyimpan kode otomatis.
formatFormat kode yang akan digunakan
? akan di replace dengan nomor urut data.
lengthJumlah digit yang akan digunakan sebagai nomor urut data.

Format kode akan otomatis digenerate pada saat kita menyimpan data menggunakan eloquent model.

$order = Order::create([
    'customer' => 'Alfa Adhitya',
]);

echo $order->code;
// SO.00001

Advance Format

Terkadang kita diharuskan menggunakan format penomoran kode yang sedikit lebih rumit dibanding contoh diatas. Misalnya, SO/2019.11.27/BDG/00001

SOKode unik yang digunakan untuk menandakan penjualan.
2019.11.27Tanggal saat transaksi dibuat dengan format Y.m.d
BDGKode cabang dimana penjualan dilakukan
00001Nomor urut penjualan yang terjadi pada tanggal tersebut

Untuk memenuhi format diatas, kita bisa menggunakan Closure pada value format.

public function getAutoNumberOptions()
{
    return [
        'code' => [
            'format' => function () {
                return 'SO/' . date('Y.m.d') . '/' . $this->branch . '/?'; 
            }
            'length' => 5,
        ]
    ];
}

Sama seperti contoh sebelumnya, kode penjualan akan otomatis digenerate pada saat data disimpan menggunakan eloquent model hanya saja dengan format yang berbeda.

Pada method getAutoNumberOptions, kita menggunakan Closure untuk konfigurasi format kode.

SOKode unik yang digunakan untuk menandakan penjualan.
date(‘Y.m.d’)Untuk mengambil tanggal hari ini
$this->branchMengambil cabang dari penjualan.
Didefinisikan pada saat penjualan dibuat.
?Nomor urut penjualan yang terjadi pada tanggal tersebut dan
di cabang yang telah didefinisikan.
$order = Order::create([
    'customer' => 'Alfa Adhitya',
    'branch' => 'BDG',
]);

echo $order->code;
// SO/2019.11.27/BDG/00001

Dengan pengaturan penomoran kode diatas, ketika terjadi penjualan di cabang yang berbeda, nomor urut akan dimulai kembali dari 1.

$order = Order::create([
    'customer' => 'Alfa Adhitya',
    'branch' => 'JKT',
]);

echo $order->code;
// SO/2019.11.27/JKT/00001

Contoh lain

Pada pengantar artikel ini, telah di contohkan sebuah kasus untuk generate nomor invoice. Pada contoh ini, akan dijelaskan bagaimana implementasi package ini dari awal. Berdasarkan skenario ini, kita buat dahulu tabel invoices dengan data sederhana saja misalnya:

ColumnFormat
idincrement
codestring
amountdecimal

Setelah itu, kita buat model Invoice dengan menggunakan perintah dibawah ini:

php artisan make:model Invoice

Dengan perintah diatas, sekarang kita sudah memiliki sebuah model class baru pada directory app.

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Invoice extends Model
{
    //
}

Setup Model

Langkah selanjutnya adalah setup model yang akan digunakan, kita akan menggunakan model Invoice yang telah kita buat pada langkah sebelumnya.

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Alfa6661\AutoNumber\AutoNumberTrait;

class Invoice extends Model
{
    use AutoNumberTrait;

    /**
     * Return the autonumber configuration array for this model.
     *
     * @return array
     */
    public function getAutoNumberOptions()
    {
        return [
            'code' => [
                'format' => function () {
                    return date('Y.m.d') . '/INV/?';
                },
                'length' => 5
            ]
        ];
    }
}

Save Data

Format kode akan otomatis tergenerate ketika kita menyimpan data pada model berdasarkan pengaturan diatas.

$invoice = Invoice::create([
    'amount' => 5000,
]);

echo $order->code;
// 2019.11.27/INV/0001

https://www.lab-informatika.com/
Comments to: Membuat kode otomatis di Laravel

Your email address will not be published. Required fields are marked *

Attach images - Only PNG, JPG, JPEG and GIF are supported.

Login

Welcome to Typer

Brief and amiable onboarding is the first thing a new user sees in the theme.
Join Typer
Registration is closed.