CRUD adalah dasar dari hampir semua sistem manajemen data: toko online, aplikasi kepegawaian, inventaris barang, dan banyak lagi. Laravel menawarkan cara paling efisien dan rapi untuk melakukan CRUD dengan Eloquent ORM dan resource controller.


📦 Studi Kasus: Manajemen Data Produk

Kolom yang akan kita kelola:


🧱 1. Buat Model & Migration

php artisan make:model Produk -m

Isi file migration database/migrations/xxxx_create_produks_table.php:

public function up(): void {
    Schema::create('produks', function (Blueprint $table) {
        $table->id();
        $table->string('nama');
        $table->integer('stok');
        $table->integer('harga');
        $table->timestamps();
    });
}

Lalu migrasi:

php artisan migrate

🧭 2. Buat Controller CRUD

php artisan make:controller ProdukController --resource

🔁 3. Routing Resource

Edit routes/web.php:

use App\Http\Controllers\ProdukController;

Route::resource('produk', ProdukController::class);

🖥️ 4. Buat View Blade

a. Index – Tampilkan Data

resources/views/produk/index.blade.php:

<a href="{{ route('produk.create') }}">Tambah Produk</a>

<table>
  <thead>
    <tr>
      <th>Nama</th><th>Stok</th><th>Harga</th><th>Aksi</th>
    </tr>
  </thead>
  <tbody>
    @foreach($produk as $p)
      <tr>
        <td>{{ $p->nama }}</td>
        <td>{{ $p->stok }}</td>
        <td>{{ $p->harga }}</td>
        <td>
          <a href="{{ route('produk.edit', $p->id) }}">Edit</a>
          <form method="POST" action="{{ route('produk.destroy', $p->id) }}">
            @csrf @method('DELETE')
            <button>Hapus</button>
          </form>
        </td>
      </tr>
    @endforeach
  </tbody>
</table>

b. Create & Edit Form

create.blade.php dan edit.blade.php bisa menggunakan form yang sama dengan sedikit penyesuaian:

<form action="{{ isset($produk) ? route('produk.update', $produk->id) : route('produk.store') }}" method="POST">
  @csrf
  @if(isset($produk)) @method('PUT') @endif

  <input type="text" name="nama" value="{{ $produk->nama ?? '' }}" placeholder="Nama Produk" required>
  <input type="number" name="stok" value="{{ $produk->stok ?? '' }}" placeholder="Stok" required>
  <input type="number" name="harga" value="{{ $produk->harga ?? '' }}" placeholder="Harga" required>
  <button type="submit">{{ isset($produk) ? 'Update' : 'Simpan' }}</button>
</form>

🧠 5. Logika di ProdukController.php

use App\Models\Produk;

public function index() {
    $produk = Produk::all();
    return view('produk.index', compact('produk'));
}

public function create() {
    return view('produk.create');
}

public function store(Request $request) {
    $request->validate([
        'nama' => 'required',
        'stok' => 'required|integer',
        'harga' => 'required|integer'
    ]);

    Produk::create($request->all());
    return redirect()->route('produk.index');
}

public function edit($id) {
    $produk = Produk::findOrFail($id);
    return view('produk.edit', compact('produk'));
}

public function update(Request $request, $id) {
    $produk = Produk::findOrFail($id);
    $produk->update($request->all());
    return redirect()->route('produk.index');
}

public function destroy($id) {
    Produk::destroy($id);
    return redirect()->route('produk.index');
}

📚 6. Tips & Best Practice

AspekRekomendasi
ValidasiGunakan Request class jika CRUD kompleks
Form ReusableGunakan komponen blade untuk form input
Error HandlingTangani findOrFail dan validasi input
UXTambahkan notifikasi sukses/gagal dengan session flash

🚀 Lanjut ke Fitur CRUD Lebih Lanjut

Setelah CRUD dasar, kamu bisa lanjut ke:


🧰 Elektra Network Vision – Konsultan CRUD & Sistem Laravel

Kami bantu:

🌐 elektranetworkvision.com — Konsultan Laravel Indonesia, siap bantu skala bisnis Anda.

Leave a Reply

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