CRUD (Create, Read, Update, Delete) adalah inti hampir setiap aplikasi. Di Laravel, membuat CRUD jauh lebih rapi berkat Migration, Eloquent, dan Blade. Artikel ini membahas cara membuat CRUD Laravel lengkap untuk mengelola data produk, dengan kode utuh.

Langkah 1: Membuat Migration (Tabel)
Migration adalah “cetak biru” tabel database. Buat migration untuk tabel produk:
php artisan make:migration create_produks_table
Buka file migration di database/migrations/, lalu isi kolomnya:
<?php
public function up(): void
{
Schema::create('produks', function (Blueprint $table) {
$table->id();
$table->string('nama');
$table->integer('harga');
$table->text('deskripsi')->nullable();
$table->timestamps();
});
}
?>
Jalankan migration untuk membuat tabel di database:
php artisan migrate
Langkah 2: Membuat Model
php artisan make:model Produk
Buka app/Models/Produk.php, izinkan kolom diisi massal:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Produk extends Model
{
protected $fillable = ['nama', 'harga', 'deskripsi'];
}
?>
Langkah 3: Membuat Controller
php artisan make:controller ProdukController --resource
Isi app/Http/Controllers/ProdukController.php:
<?php
namespace App\Http\Controllers;
use App\Models\Produk;
use Illuminate\Http\Request;
class ProdukController extends Controller
{
public function index() {
$produks = Produk::latest()->get();
return view('produk.index', compact('produks'));
}
public function create() {
return view('produk.create');
}
public function store(Request $request) {
$request->validate([
'nama' => 'required',
'harga' => 'required|integer',
]);
Produk::create($request->all());
return redirect('/produk')->with('sukses', 'Data tersimpan!');
}
public function edit(Produk $produk) {
return view('produk.edit', compact('produk'));
}
public function update(Request $request, Produk $produk) {
$produk->update($request->all());
return redirect('/produk')->with('sukses', 'Data diperbarui!');
}
public function destroy(Produk $produk) {
$produk->delete();
return redirect('/produk')->with('sukses', 'Data dihapus!');
}
}
?>
Langkah 4: Membuat Route
Di routes/web.php, cukup satu baris untuk semua rute CRUD:
<?php
use App\Http\Controllers\ProdukController;
Route::resource('produk', ProdukController::class);
?>
Langkah 5: Membuat View (Blade)
Buat resources/views/produk/index.blade.php untuk menampilkan data:
<a href="/produk/create">+ Tambah Produk</a>
@if (session('sukses'))
<p style="color:green">{{ session('sukses') }}</p>
@endif
<table border="1">
<tr><th>Nama</th><th>Harga</th><th>Aksi</th></tr>
@foreach ($produks as $produk)
<tr>
<td>{{ $produk->nama }}</td>
<td>{{ $produk->harga }}</td>
<td>
<a href="/produk/{{ $produk->id }}/edit">Edit</a>
<form action="/produk/{{ $produk->id }}" method="POST" style="display:inline">
@csrf @method('DELETE')
<button onclick="return confirm('Hapus?')">Hapus</button>
</form>
</td>
</tr>
@endforeach
</table>
Form tambah (create.blade.php) memakai token keamanan @csrf:
<form action="/produk" method="POST">
@csrf
<input type="text" name="nama" placeholder="Nama" required>
<input type="number" name="harga" placeholder="Harga" required>
<button type="submit">Simpan</button>
</form>
Kesalahan Umum
- “MassAssignmentException” — kolom belum didaftarkan di
$fillable. - Error 419 (Page Expired) — lupa
@csrfdi form. - Method DELETE/PUT tidak jalan — lupa
@method('DELETE')atau@method('PUT').
Kesimpulan
Anda telah membuat CRUD Laravel lengkap dengan Migration, Model Eloquent, Resource Controller, Route, dan View Blade. Pola ini adalah fondasi hampir semua aplikasi Laravel. Langkah berikutnya, tambahkan sistem login agar hanya pengguna terdaftar yang bisa mengelola data.
Referensi: untuk pendalaman, kunjungi dokumentasi resmi Laravel.

