> For the complete documentation index, see [llms.txt](https://learn.devlabss.my.id/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://learn.devlabss.my.id/laravel/bab-8-fitur-update-and-delete/8.5-tantangan-crud-tabel-kategori.md).

# 8.5 Tantangan: CRUD Tabel Kategori

## Tantangan: CRUD tabel kategori

Setelah menyelesaikan fitur edit dan hapus pada data buku, sekarang saatnya Anda mencoba menerapkan pola yang sama pada data lain.

Tantangan kali ini adalah membuat CRUD sederhana untuk **kategori buku**.

Tujuan halaman ini bukan sekadar mengetik kode lagi.

Tujuannya adalah menguji apakah Anda benar-benar paham polanya.

### Kenapa memakai tabel kategori

Karena kategori adalah data yang lebih sederhana daripada buku.

Biasanya isinya tidak sebanyak tabel `buku`.

Tetapi alur CRUD-nya tetap sama.

Justru karena lebih sederhana, tabel ini cocok untuk latihan mandiri.

### Gambaran target tantangan

Di akhir tantangan ini, Anda diharapkan bisa membuat fitur berikut:

* menampilkan daftar kategori
* menambah kategori baru
* mengedit nama kategori
* menghapus kategori

Kalau Anda bisa menyelesaikannya, berarti pola CRUD dasar sudah mulai melekat.

### Struktur data yang disarankan

Untuk latihan ini, Anda bisa memakai tabel `kategori` dengan field sederhana seperti:

* `id`
* `nama_kategori`
* `created_at`
* `updated_at`

Nama field boleh tetap sederhana.

Yang penting konsisten dari migration, model, controller, sampai Blade.

### Langkah tantangan step-by-step

Kerjakan tantangan ini dengan urut.

{% stepper %}
{% step %}

### Buat migration dan model kategori

Coba buat:

* model `Kategori`
* migration tabel `kategori`

Pastikan tabel punya primary key `id` dan field `nama_kategori`.

Kalau perlu, ingat lagi pola dari BAB 5 dan BAB 6.
{% endstep %}

{% step %}

### Buat controller resource

Buat controller untuk kategori.

Usahakan memakai resource controller agar alurnya mirip dengan `BukuController`.

Setelah itu, aktifkan route resource untuk kategori di `routes/web.php`.
{% endstep %}

{% step %}

### Buat halaman index dan create

Minimal siapkan dua halaman lebih dulu:

* daftar kategori
* form tambah kategori

Kalau dua halaman ini sudah jalan, biasanya langkah berikutnya akan terasa lebih mudah.
{% endstep %}

{% step %}

### Tambahkan validasi dan proses simpan

Saat membuat kategori baru, pastikan nama kategori:

* wajib diisi
* bertipe string
* punya panjang maksimal yang masuk akal

Setelah itu, simpan data ke database dan tampilkan pesan sukses.
{% endstep %}

{% step %}

### Lengkapi edit, update, dan delete

Setelah create berhasil, lanjutkan dengan:

* tombol edit
* tombol hapus
* form edit
* method update
* method destroy

Pola logikanya sangat mirip dengan fitur buku di BAB 8 ini.
{% endstep %}
{% endstepper %}

### Petunjuk agar tidak bingung

Kalau Anda mulai mentok, ingat pola besar berikut:

```
index -> create -> store -> edit -> update -> destroy
```

Urutan itu adalah inti dari resource controller.

Kalau untuk data buku Anda sudah paham, maka untuk kategori seharusnya tinggal menyesuaikan nama model, field, dan tampilan.

### Checklist hasil yang seharusnya dicapai

Setelah tantangan selesai, coba cek apakah hal berikut sudah berhasil:

* halaman daftar kategori bisa dibuka
* kategori baru bisa ditambah
* kategori lama bisa diedit
* kategori bisa dihapus
* validasi berjalan saat field kosong
* pesan sukses tampil setelah simpan, update, dan hapus

### Jika Anda mentok, cek bagian ini dulu

Bagian yang paling sering bikin tersendat biasanya:

* nama tabel tidak sama dengan model
* route resource belum aktif
* nama input tidak sama dengan nama field database
* `@method('PUT')` atau `@method('DELETE')` lupa ditulis
* `$fillable` pada model belum disiapkan

{% hint style="warning" %}
Jangan buru-buru membuat fitur terlalu banyak sekaligus. Selesaikan dulu `index` dan `create`, baru lanjut ke `edit` dan `delete`.
{% endhint %}

{% hint style="info" %}
Kalau Anda bisa meniru pola CRUD buku lalu menyesuaikannya untuk kategori, berarti Anda sudah mulai berpikir sebagai developer, bukan sekadar penyalin kode.
{% endhint %}

### Output yang harus terlihat

Setelah tantangan ini selesai, hasil berikut seharusnya sudah terlihat:

* tabel `kategori` berhasil dibuat
* route resource kategori aktif
* halaman daftar kategori, tambah kategori, edit kategori, dan hapus kategori berjalan
* validasi dasar dan pesan sukses bekerja seperti fitur buku

### Poin evaluasi bab 8.5

Pastikan Anda sudah mencoba hal berikut:

* Saya mencoba membuat tabel `kategori`.
* Saya mencoba membuat CRUD dasar untuk kategori.
* Saya mencoba menerapkan validasi sendiri.
* Saya mencoba memakai ulang pola dari fitur buku.
* Saya mulai bisa membedakan bagian yang tinggal disalin pola logikanya dan bagian yang harus disesuaikan.

Jika tantangan ini sudah cukup jelas, lanjut ke [8.6 Checkpoint: Uji Pemahamanmu Sebelum Lanjut!](/laravel/bab-8-fitur-update-and-delete/8.6-checkpoint-uji-pemahamanmu-sebelum-lanjut.md).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://learn.devlabss.my.id/laravel/bab-8-fitur-update-and-delete/8.5-tantangan-crud-tabel-kategori.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
