#11: Menghapus yang Tidak Perlu (Delete) – Tombol Hapus dengan Peringatan
Halo, Petugas Kebersihan Data!
Kadang ada kategori yang tidak terpakai atau salah buat. Kita perlu menghapusnya. Tapi hati-hati, jangan sampai salah hapus! Di tutorial ini, kita akan membuat fitur Delete (Hapus) dengan kotak peringatan (konfirmasi) yang bertanya, "Yakin mau hapus?" sebelum benar-benar menghapus dari database. Ini adalah bagian terakhir dari CRUD (Create, Read, Update, Delete). Setelah ini, CRUD kategori kita lengkap!
- Membuat method
destroy()diCategoryControlleruntuk menghapus data. - Menambahkan rute DELETE untuk menghapus kategori.
- Menambahkan tombol "Hapus" di setiap baris tabel kategori.
- Memberi konfirmasi JavaScript sebelum menghapus (agar tidak kebablasan).
- Menampilkan pesan sukses setelah data terhapus.
Peringatan Penting Sebelum Menghapus
Langkah 1: Menambahkan Method Destroy di Controller
Buka app/Http/Controllers/CategoryController.php. Tambahkan method destroy() di bagian bawah (setelah method update()).
// Menghapus kategori dari database
public function destroy($id)
{
// Cari kategori berdasarkan ID
$category = Category::findOrFail($id);
// Hapus data
$category->delete();
// Redirect ke halaman daftar kategori dengan pesan sukses
return redirect()->route('kategori.index')->with('success', 'Kategori "' . $category->name . '" berhasil dihapus!');
}
Penjelasan:
findOrFail($id)→ mencari kategori. Jika tidak ada, tampilkan error 404.$category->delete()→ perintah ajaib untuk menghapus data dari database.- Pesan sukses menyertakan nama kategori yang dihapus agar lebih jelas.
use SoftDeletes di model. Tapi untuk pemula, hapus permanen dulu lebih sederhana.Langkah 2: Menambahkan Rute DELETE
Buka routes/web.php. Tambahkan rute untuk menghapus kategori. Gunakan method delete. Letakkan setelah rute update.
use App\Http\Controllers\CategoryController;
Route::get('/kategori', [CategoryController::class, 'index'])->name('kategori.index');
Route::get('/kategori/create', [CategoryController::class, 'create'])->name('kategori.create');
Route::post('/kategori', [CategoryController::class, 'store'])->name('kategori.store');
Route::get('/kategori/{id}/edit', [CategoryController::class, 'edit'])->name('kategori.edit');
Route::put('/kategori/{id}', [CategoryController::class, 'update'])->name('kategori.update');
// Rute untuk menghapus kategori
Route::delete('/kategori/{id}', [CategoryController::class, 'destroy'])->name('kategori.destroy');
Penjelasan: Route::delete karena kita akan mengirim request DELETE. Di dalam form nanti kita akan menggunakan @method('DELETE').
Langkah 3: Menambahkan Tombol Hapus di Tabel
Buka resources/views/kategori.blade.php. Cari kolom "Aksi". Kita akan tambahkan tombol hapus di samping tombol edit. Ubah bagian tersebut menjadi:
<td>
<a href="{{ route('kategori.edit', $category->id) }}" style="background: #ffc107; color: #333; padding: 4px 10px; text-decoration: none; border-radius: 4px; margin-right: 5px;">Edit</a>
<form action="{{ route('kategori.destroy', $category->id) }}" method="POST" style="display: inline-block;">
@csrf
@method('DELETE')
<button type="submit" onclick="return confirm('Yakin ingin menghapus kategori "{{ $category->name }}"?')" style="background: #dc3545; color: white; border: none; padding: 4px 10px; border-radius: 4px; cursor: pointer;">Hapus</button>
</form>
</td>
Penjelasan penting:
- Kita menggunakan
<form>dengan method POST, tapi di dalamnya ada@method('DELETE')agar Laravel membaca sebagai request DELETE. @csrfwajib untuk keamanan.onclick="return confirm('...')"→ ini adalah kotak peringatan bawaan JavaScript. Jika pengguna klik "OK", form akan dikirim. Jika "Batal", tidak jadi hapus.- Pesan konfirmasi menampilkan nama kategori yang akan dihapus agar lebih jelas.
Langkah 4: Uji Coba Hapus
Pastikan server Laravel berjalan. Buka http://localhost:8000/kategori. Sekarang setiap baris kategori memiliki tombol Hapus berwarna merah. Coba klik tombol Hapus pada salah satu kategori.
Maka akan muncul kotak peringatan: "Yakin ingin menghapus kategori Teknologi?". Klik OK. Data akan langsung terhapus dari database, dan kamu akan diarahkan kembali ke halaman daftar kategori dengan pesan sukses: "Kategori Teknologi berhasil dihapus!".
Coba juga klik Hapus lalu klik Batal – data tidak akan terhapus. Bagus, kan?
Langkah Opsional: Menambahkan Pesan Konfirmasi dengan Nama Kategori Dinamis
Pada kode di atas, kita menulis return confirm('... "{{ $category->name }}"?'). Perhatikan bahwa kita menggunakan tanda petik ganda dan tunggal dengan hati-hati. Jika nama kategori mengandung tanda petik, bisa error. Untuk amannya, gunakan addslashes atau lebih baik menggunakan pendekatan data attribute. Tapi untuk pemula dan nama kategori sederhana (tanpa petik), itu sudah cukup. Alternatif yang lebih aman:
<button type="submit" onclick="return confirm('Yakin hapus kategori ' + '{{ addslashes($category->name) }}' + '?')" ...>
Atau bisa juga menggunakan data-nama dan JavaScript, tapi itu lebih kompleks. Untuk sekarang, kode pertama sudah oke.
Ringkasan CRUD Kategori (Lengkap!)
Selamat! Sekarang kita sudah menyelesaikan semua operasi CRUD untuk fitur kategori:
- ✅ Create – Menambah kategori (tutorial #8).
- ✅ Read – Menampilkan daftar kategori (tutorial #9).
- ✅ Update – Mengedit kategori (tutorial #10).
- ✅ Delete – Menghapus kategori (tutorial #11).
Kita juga sudah belajar tentang validasi, paginasi, pencarian, routing, controller, model, view, dan konfirmasi hapus. Luar biasa!
Apa Selanjutnya?
Sekarang kita akan beralih ke fitur utama: Mengelola Berita (News). Kita akan membuat tabel berita, model, controller, dan CRUD untuk berita. Berita akan memiliki gambar, isi konten, dan terhubung ke kategori. Ini akan lebih seru! Setelah itu, kita akan membuat halaman depan situs berita yang bisa dibaca oleh pengunjung.
Jangan lupa untuk terus mempraktikkan. Jika ada error, baca pesan errornya dengan teliti – itu adalah teman terbaik programmer.
Seri Tutorial Laravel 13 Pemula – Proyek Web Berita
Selanjutnya: #12: Membuat Tabel Berita – Migration news (title, slug, content, image, category_id)