Tutorial ini akan memandu Anda dalam mengimplementasikan fungsionalitas Update dalam konsep CRUD (Create, Read, Update, Delete) di Laravel. Anda akan belajar cara membuat form untuk mengedit data dan menyimpannya kembali ke database.
Langkah 1: Persiapan
Pastikan Anda memiliki model Product dan controller ProductController yang telah kita gunakan di tutorial sebelumnya. Juga, pastikan tabel products memiliki data untuk diuji.
Langkah 2: Menambahkan Metode edit dan update di Controller
Kita akan menambahkan dua metode baru di ProductController. Metode edit akan menampilkan form yang sudah terisi dengan data yang akan diedit, sedangkan metode update akan memproses data yang di-submit dari form dan menyimpannya ke database.
Buka file app/Http/Controllers/ProductController.php dan tambahkan atau lengkapi metode edit dan update seperti di bawah ini:
<?php
namespace App\Http\Controllers;
use App\Models\Product;
use Illuminate\Http\Request;
class ProductController extends Controller
{
// ... metode index() dan create()...
/**
* Show the form for editing the specified resource.
*/
public function edit(Product $product)
{
return view('products.edit', compact('product'));
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, Product $product)
{
// 1. Validasi input
$validatedData = $request->validate([
'name' => 'required|max:255',
'description' => 'required',
]);
// 2. Perbarui data
$product->update($validatedData);
// 3. Redirect kembali dengan pesan sukses
return redirect()->route('products.index')->with('success', 'Produk berhasil diperbarui!');
}
// ... metode resource lainnya ...
}
Penjelasan Kode
edit(Product $product):- Laravel secara otomatis menemukan produk berdasarkan ID yang ada di URL dan mengikatnya ke parameter
$product. Ini dikenal sebagai Route Model Binding, fitur yang sangat kuat dari Laravel. - Metode ini hanya mengembalikan view bernama
products.editdan meneruskan objek$productke view tersebut.
- Laravel secara otomatis menemukan produk berdasarkan ID yang ada di URL dan mengikatnya ke parameter
update(Request $request, Product $product):- Metode ini menerima data form (
$request) dan objek$productyang telah diikat. $request->validate(...): Proses validasi sama seperti pada metodestore, memastikan data yang di-submit valid.$product->update($validatedData);: Ini adalah cara paling efisien untuk memperbarui data di Laravel. Metodeupdate()menerima array data dan secara otomatis memperbarui kolom-kolom yang sesuai di database.return redirect()->route(...): Setelah data diperbarui, pengguna dialihkan kembali ke halaman daftar produk dengan pesan sukses.
- Metode ini menerima data form (
Langkah 3: Membuat View untuk Form Edit
Sekarang, buat file baru edit.blade.php di dalam direktori resources/views/products/. View ini akan mirip dengan view create, tetapi sudah terisi dengan data yang ada.
resources/views/products/edit.blade.php:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Edit Produk</title>
</head>
<body>
<h1>Edit Produk</h1>
@if ($errors->any())
<div>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form action="{{ route('products.update', $product->id) }}" method="POST">
@csrf
@method('PUT')
<div>
<label for="name">Nama Produk:</label>
<input type="text" id="name" name="name" value="{{ old('name', $product->name) }}">
</div>
<br>
<div>
<label for="description">Deskripsi Produk:</label>
<textarea id="description" name="description">{{ old('description', $product->description) }}</textarea>
</div>
<br>
<button type="submit">Perbarui</button>
</form>
</body>
</html>
Penjelasan Kode
<form action="{{ route('products.update', $product->id) }}" method="POST">: Atributactionmenggunakanroute()untuk menghasilkan URL ke metodeupdatedengan ID produk.@method('PUT'): Ini adalah direktif Blade yang sangat penting. Karena form HTML hanya mendukung metodeGETdanPOST, direktif ini menghasilkan input tersembunyi yang memberi tahu Laravel bahwa permintaan ini seharusnya ditangani sebagai permintaanPUT.value="{{ old('name', $product->name) }}": Fungsiold()sekarang memiliki parameter kedua. Jika validasi gagal, ia akan menggunakan nilai yang di-submit sebelumnya (old('name')). Jika tidak ada nilai lama (misalnya, saat pertama kali membuka halaman edit), ia akan menggunakan nilai dari database ($product->name).
Langkah 4: Menambahkan Link ke Form Edit
Anda perlu menambahkan link atau tombol di view daftar produk (misalnya, resources/views/products/index.blade.php) agar pengguna bisa mengakses form edit.
Tambahkan kode ini di dalam loop @foreach di view index.blade.php:
...
<td>
<a href="{{ route('products.edit', $product->id) }}">Edit</a>
</td>
...
Mengakses Halaman
- Akses URL
http://localhost:8000/productsuntuk melihat daftar produk. - Klik link “Edit” di samping produk yang ingin Anda perbarui.
- Anda akan dialihkan ke halaman edit yang menampilkan data produk.
- Ubah data di form dan klik “Perbarui”.
- Anda akan kembali ke halaman daftar produk dengan data yang sudah diperbarui.
Selamat! Anda telah berhasil mengimplementasikan operasi Update dalam CRUD Laravel.