Our blog

Bagaimana cara mengatur auto-increment pada migration di Laravel

 

Latest Blog's

Bagaimana cara mengatur auto-increment pada migration di Laravel

Laravel     3 weeks ago


Laravel memiliki mekanisme database migration yang sangat bagus. Tetapi bagaimana caranya kita atur nilai auto-increment disana?

Sebagai contoh, bagaimana caranya kita set nilai auto-increment kita dimulai dari nilai selain "0", misal 4000, dan seterusnya.

Secara default, kita dapat menggunakan function increments() untuk men-set auto_increment:

Schema::create('books', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    // ... more fields
});

Saat ini belum ada method atau gunction yang bisa kita pakai semisal seperti ini:

$table->increments('id')->start_from(4000);

Baik, kita coba cari solusinya. Disini kita akan coba paparkan 2 opsi yang bisa kita coba.

Opsi 1. Raw DB Statement

Setelah Schema::create(), tambahkan raw SQL statement untuk merubah nilai auto_increment:

public function up()
{
    Schema::create('books', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        // ... more fields
    });
 
    DB::statement("ALTER TABLE books AUTO_INCREMENT = 4000;");
}

Opsi 2. tambah dan hapus record

Salah satu fitur dari database ialah, setelah menghapus record secara default nilai auto_increment akan tertinggal dan jika kita menambah record baru akan orimatis menambahkan nilai selanjutnya pada field auto_increment kita.

Contoh dibawah kita insert data dengan nilai id = 3999 (sebagai auto-increment) kemudian kita menghapusnya.

public function up()
{
    Schema::create('books', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        // ... more fields
    });

    DB::table('books')->insert(['id' => 3999, 'name' => 'whatever']);
    DB::table('books')->where('id', 3999)->delete();
}

OK, simple kan? Lalu mana yang kalian pilih? Atau mungkin ada solisi lain? Well,, semoga tulisan ini bermanfaat.