> 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.3-membuat-fitur-hapus-data-buku.md).

# 8.3 Membuat Fitur Hapus Data Buku

## Membuat fitur hapus data buku

Setelah bisa mengubah data, sekarang kita lanjut ke fitur hapus.

Fitur ini terlihat sederhana.

Tetapi risikonya lebih besar.

Kalau salah target, data bisa hilang.

Karena itu, logika hapus harus benar-benar jelas.

### Teori awal dan analogi

Bayangkan petugas perpustakaan sedang membersihkan katalog.

Ada data buku yang duplikat atau salah input.

Petugas tidak boleh menghapus sembarang baris.

Petugas harus yakin buku mana yang benar-benar ingin dihapus.

Di Laravel, kepastian itu tetap bergantung pada **ID**.

Jadi proses hapus bukan sekadar menekan tombol.

Di belakang layar, aplikasi harus tahu data mana yang sedang ditargetkan.

### Target praktik subbab ini

Setelah menyelesaikan subbab ini, Anda seharusnya bisa:

* menambahkan tombol hapus di daftar buku
* membuat method `destroy()` di controller
* mengirim request hapus dengan benar
* menghapus data berdasarkan ID
* menampilkan pesan sukses setelah data dihapus

### Langkah praktik step-by-step

Ikuti langkah berikut dengan urut.

{% stepper %}
{% step %}

### Tambahkan tombol hapus di halaman daftar buku

Buka file:

`resources/views/buku/index.blade.php`

Lengkapi kolom aksi sehingga isinya menjadi seperti ini:

```blade
<td>
    <a href="{{ route('buku.edit', $buku->id) }}">Edit</a>

    <form action="{{ route('buku.destroy', $buku->id) }}" method="POST">
        @csrf
        @method('DELETE')
        <button type="submit">Hapus</button>
    </form>
</td>
```

Sekarang setiap data buku punya tombol **Edit** dan **Hapus**.
{% endstep %}

{% step %}

### Tambahkan method `destroy()` di controller

Buka file:

`app/Http/Controllers/BukuController.php`

Lalu tambahkan method berikut:

```php
public function destroy($id)
{
    $buku = Buku::findOrFail($id);
    $buku->delete();

    return redirect()->route('buku.index')
        ->with('success', 'Data buku berhasil dihapus.');
}
```

Method ini akan mencari data berdasarkan ID, lalu menghapusnya.
{% endstep %}

{% step %}

### Pastikan pesan sukses tetap tampil

Buka file:

`resources/views/buku/index.blade.php`

Pastikan Anda sudah punya bagian seperti ini:

```blade
@if (session('success'))
    <p>{{ session('success') }}</p>
@endif
```

Pesan ini akan dipakai lagi setelah proses hapus berhasil.
{% endstep %}

{% step %}

### Uji tombol hapus di browser

Sebelum mengetes, pastikan server Laravel hidup.

Silakan pilih salah satu:

* buka **Laragon** lalu klik **Start All**
* atau jalankan `php artisan serve`

Setelah itu, buka:

```
http://127.0.0.1:8000/buku
```

Pilih salah satu data buku.

Lalu klik tombol **Hapus**.
{% endstep %}

{% step %}

### Amati hasilnya

Kalau berhasil:

* halaman akan kembali dimuat
* pesan sukses akan muncul
* satu baris data buku akan hilang dari tabel

Kalau jumlah data sebelumnya ada lima, setelah hapus akan berkurang menjadi empat.
{% endstep %}
{% endstepper %}

### Penjelasan pasca-praktik

Sekarang mari kita bedah bagian yang paling penting.

#### 1. Kenapa tombol hapus memakai form

Tombol hapus tidak cukup hanya memakai link biasa.

Karena proses hapus seharusnya tidak dikirim sebagai request `GET`.

Laravel mengharapkan route hapus dikirim lewat request yang sesuai, yaitu `DELETE`.

#### 2. `@method('DELETE')`

Sama seperti update, HTML form tidak punya method `DELETE` asli.

Karena itu, Laravel memakai `@method('DELETE')` untuk menandai jenis request-nya.

Dengan begitu, route resource bisa mengarahkannya ke method `destroy()`.

#### 3. `Buku::findOrFail($id)`

Baris ini memastikan data yang akan dihapus benar-benar ada.

Kalau tidak ada, Laravel akan menghentikan proses dan menampilkan error yang sesuai.

#### 4. `$buku->delete()`

Inilah perintah yang benar-benar menghapus data dari tabel `buku`.

Setelah baris ini dijalankan, record tersebut tidak lagi ada di database.

### Alur data teknis

Saat tombol **Hapus** ditekan, alurnya seperti ini:

1. form mengirim request `POST`
2. Laravel membaca `@method('DELETE')`
3. route resource mengarahkannya ke method `destroy()`
4. controller mencari data berdasarkan ID
5. data dihapus dari database
6. browser diarahkan kembali ke halaman daftar buku
7. pesan sukses ditampilkan

### Output yang harus terlihat

Setelah subbab ini selesai, hasil berikut seharusnya sudah terlihat:

* setiap baris data punya tombol **Hapus**
* request hapus mengarah ke route `buku.destroy`
* satu baris data hilang dari tabel setelah dihapus
* pesan sukses tampil setelah proses hapus selesai

### Hal yang perlu diperhatikan

Fitur hapus memang berguna.

Tetapi selalu punya risiko.

Karena itu, pada proyek nyata biasanya tombol hapus diberi:

* konfirmasi tambahan
* pembatasan hak akses
* pencatatan aktivitas

Untuk modul dasar ini, kita fokus dulu pada logika utamanya.

### Troubleshooting yang paling sering

Masalah yang paling sering muncul:

* **tombol hapus tidak bekerja** — form atau route salah
* **error method tidak sesuai** — `@method('DELETE')` belum ditulis
* **data tidak berkurang** — method `destroy()` belum ada atau delete gagal
* **pesan sukses tidak muncul** — session belum ditampilkan di index

{% hint style="warning" %}
Jangan mengirim proses hapus lewat link biasa jika Anda memakai resource controller. Gunakan form agar method request-nya jelas.
{% endhint %}

{% hint style="info" %}
Kalau Anda takut salah hapus saat tes, buat dulu beberapa data dummy tambahan agar lebih aman untuk percobaan.
{% endhint %}

### Poin evaluasi bab 8.3

Pastikan Anda sudah memahami poin berikut:

* Saya bisa menambahkan tombol hapus di tabel.
* Saya paham proses hapus tetap membutuhkan ID data.
* Saya bisa membuat method `destroy()` di controller.
* Saya paham `@method('DELETE')` dipakai untuk request hapus.
* Saya bisa mengecek hasil hapus di halaman daftar buku.

Jika semuanya sudah jelas, lanjut ke [8.4 Penjelasan Method PUT & DELETE](/laravel/bab-8-fitur-update-and-delete/8.4-penjelasan-method-put-and-delete.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.3-membuat-fitur-hapus-data-buku.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.
