Cara Membuat CRUD Laravel 11 dari Nol untuk Pemula

CRUD (Create, Read, Update, Delete) adalah fondasi hampir setiap aplikasi web. Begitu Anda menguasainya di Laravel, membangun fitur apa pun — dari aplikasi kasir hingga inventory —...

Cara Membuat CRUD Laravel 11 dari Nol untuk Pemula

CRUD (Create, Read, Update, Delete) adalah fondasi hampir setiap aplikasi web. Begitu Anda menguasainya di Laravel, membangun fitur apa pun — dari aplikasi kasir hingga inventory — menjadi jauh lebih mudah karena polanya berulang. Tutorial ini membangun CRUD produk lengkap di Laravel 11 dari nol, dengan kode yang bisa langsung Anda salin dan pahami.

1. Menyiapkan Tabel lewat Migration

Alih-alih membuat tabel manual di phpMyAdmin, gunakan migration agar struktur database ikut terlacak di kode. Buat model sekaligus migration-nya:

php artisan make:model Product -m

Buka file migration di database/migrations/ dan definisikan kolomnya:

public function up(): void
{
    Schema::create('products', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->integer('price');
        $table->integer('stock')->default(0);
        $table->text('description')->nullable();
        $table->timestamps();
    });
}

Jalankan migrasi untuk membuat tabel:

php artisan migrate

2. Menyiapkan Model

Agar bisa mengisi data secara massal lewat create() dan update(), daftarkan kolom yang boleh diisi pada properti $fillable. Langkah ini melindungi Anda dari celah mass assignment:

class Product extends Model
{
    protected $fillable = ['name', 'price', 'stock', 'description'];
}

3. Membuat Resource Controller

Laravel punya controller khusus yang sudah menyiapkan tujuh method CRUD sekaligus. Buat dengan flag --resource:

php artisan make:controller ProductController --resource

Daftarkan satu baris route yang otomatis memetakan semua method tersebut di routes/web.php:

use App\Http\Controllers\ProductController;

Route::resource('products', ProductController::class);

Cek hasilnya dengan php artisan route:list — Anda akan melihat route index, create, store, edit, update, dan destroy tercipta otomatis.

4. Menampilkan dan Menyimpan Data

Isi method index() untuk menampilkan daftar, dan store() untuk menyimpan data baru:

public function index()
{
    $products = Product::latest()->paginate(10);
    return view('products.index', compact('products'));
}

public function store(StoreProductRequest $request)
{
    Product::create($request->validated());
    return redirect()->route('products.index')
        ->with('success', 'Produk berhasil ditambahkan.');
}

5. Validasi yang Rapi dengan Form Request

Perhatikan tipe parameter StoreProductRequest di atas. Alih-alih menumpuk aturan validasi di controller, pindahkan ke kelas khusus agar controller tetap bersih:

php artisan make:request StoreProductRequest
public function rules(): array
{
    return [
        'name'  => 'required|string|max:255',
        'price' => 'required|integer|min:0',
        'stock' => 'required|integer|min:0',
    ];
}

Jika validasi gagal, Laravel otomatis mengembalikan pengguna ke form beserta pesan error — tanpa kode tambahan.

6. Tampilan Blade Sederhana

Buat resources/views/products/index.blade.php untuk menampilkan data dalam tabel:

@foreach ($products as $product)
    <tr>
        <td>{{ $product->name }}</td>
        <td>{{ number_format($product->price) }}</td>
        <td>{{ $product->stock }}</td>
    </tr>
@endforeach

{{ $products->links() }}

Baris {{ $products->links() }} otomatis menampilkan navigasi pagination.

7. Memperbarui dan Menghapus

Berkat route model binding, Laravel otomatis mencarikan record berdasarkan ID di URL:

public function update(StoreProductRequest $request, Product $product)
{
    $product->update($request->validated());
    return redirect()->route('products.index')
        ->with('success', 'Produk diperbarui.');
}

public function destroy(Product $product)
{
    $product->delete();
    return back()->with('success', 'Produk dihapus.');
}

Menambahkan Pencarian & Pagination

Aplikasi nyata butuh pencarian. Gunakan when() agar filter hanya aktif saat ada kata kunci:

$products = Product::query()
    ->when($request->q, fn($query) =>
        $query->where('name', 'like', '%'.$request->q.'%'))
    ->latest()
    ->paginate(10)
    ->withQueryString();

withQueryString() menjaga kata kunci tetap terbawa saat berpindah halaman.

Kesalahan Umum yang Perlu Dihindari

  • Lupa $fillable: menyebabkan MassAssignmentException saat create().
  • Tidak memvalidasi input: data kotor masuk ke database dan membuka celah keamanan.
  • Menaruh semua logika di controller: gunakan Form Request dan, untuk logika kompleks, Service class.

Dengan tujuh langkah ini Anda sudah memiliki CRUD utuh yang aman dan rapi. Pola yang sama bisa Anda ulang untuk entitas lain seperti pelanggan, transaksi, atau kategori — inilah alasan menguasai CRUD membuat pembangunan aplikasi berikutnya terasa jauh lebih cepat.

Langkah Selanjutnya Setelah Menguasai CRUD

Setelah memahami operasi buat, baca, ubah, dan hapus, Anda telah menguasai fondasi paling penting dalam pengembangan aplikasi. Langkah berikutnya adalah memperkuat dasar tersebut dengan validasi input yang rapi agar data yang masuk selalu benar. Pelajari relasi antar-tabel seperti satu ke banyak dan banyak ke banyak untuk membangun fitur yang lebih kompleks. Tambahkan autentikasi agar hanya pengguna berwenang yang dapat mengubah data, lalu terapkan otorisasi peran untuk kontrol yang lebih halus. Percantik antarmuka dengan komponen yang dapat dipakai ulang dan tingkatkan pengalaman pengguna melalui pesan umpan balik yang jelas. Jangan lupa menulis pengujian agar fitur tetap andal saat aplikasi berkembang. Dengan membangun bertahap di atas fondasi CRUD, Anda akan mampu menciptakan aplikasi yang lengkap, aman, dan mudah dipelihara.

Pertanyaan Umum (FAQ)

Apa itu CRUD? Singkatan dari Create, Read, Update, Delete, yaitu empat operasi dasar pengelolaan data yang menjadi fondasi hampir semua aplikasi.

Apakah perlu menguasai CRUD sebelum fitur lanjutan? Ya. CRUD adalah dasar; setelah menguasainya, relasi, autentikasi, dan fitur kompleks lain jauh lebih mudah dipahami.

Bagaimana menjaga data tetap valid? Terapkan validasi input pada setiap operasi buat dan ubah agar data yang tersimpan selalu benar dan konsisten.

Yudhi
Ditulis oleh
Yudhi
Founder & Lead Developer, GudangCode

Yudhi adalah founder GudangCode dan developer Laravel dengan pengalaman membangun puluhan sistem informasi bisnis siap pakai — mulai dari POS, HRIS, hingga aplikasi manajemen. Ia menulis panduan dan artikel di GudangCode untuk membantu developer Indonesia menjalankan, memahami, dan men-deploy source code Laravel dengan benar.

Laravel PHP MySQL Sistem Informasi Bisnis
Lihat semua artikel Yudhi
Mau source code & aplikasi lengkapnya?

Daftar gratis untuk mengunduh aplikasi bisnis, sistem informasi, dan source code Laravel siap pakai.

Daftar Gratis & Download
Laravel PHP CRUD Tutorial
📚 Free Learning Hub

Learn Coding for Free at DhieCoderWeb

Explore Laravel, PHP, JavaScript tutorials, source code, web development guides, and practical programming tips.

DhieCoderWeb
100+
Tutorials
Free
Learning
SEO
Tips
Visit Dhiecoderweb.com →

Dapatkan Akses Penuh Sekarang!

Bergabunglah menjadi member kami dan dapatkan akses eksklusif ke seluruh fitur unggulan aplikasi ini. Proses cepat, mudah, dan langsung bisa Anda gunakan.

Daftar Members Sekarang
Tim Support
Online
Isi data dulu untuk mulai chat:
Beri rating & testimoni sebelum menutup:
Live chat by gudangcode.com