Selamat datang kembali di seri tutorial Laravel! Pada tutorial sebelumnya, kita sudah mengenal Eloquent ORM dan kekuatannya dalam berinteraksi dengan database. Kini, saatnya kita mengaplikasikan pengetahuan tersebut untuk membuat aplikasi CRUD (Create, Read, Update, Delete) sederhana dan fungsional di Laravel.
Tutorial ini akan menggunakan Eloquent secara penuh untuk mengelola data mahasiswa, sehingga Anda tidak perlu menulis satu pun baris kode SQL.
Persiapan Awal
Pastikan Anda sudah memiliki hal-hal berikut:
- Proyek Laravel: Proyek Laravel Anda sudah berjalan dan terhubung ke database.
- Migration dan Model: Anda sudah memiliki tabel
mahasiswadi database dan modelMahasiswayang sesuai. Jika belum, Anda bisa membuatnya dengan cepat:- Migration:
php artisan make:migration create_mahasiswa_table --create=mahasiswa - Model:
php artisan make:model Mahasiswa
Pastikan file
Mahasiswa.phpdiapp/Models/memiliki$fillableyang sesuai:PHPprotected $fillable = ['nama', 'nim', 'jurusan']; - Migration:
- Controller: Buat controller baru untuk mengelola operasi CRUD:
php artisan make:controller MahasiswaController
Langkah 1: READ (Menampilkan Data)
Kita akan memulai dengan menampilkan semua data mahasiswa yang ada di database.
Controller
Buka file MahasiswaController.php dan tambahkan logika untuk menampilkan data.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Mahasiswa;
class MahasiswaController extends Controller
{
public function index()
{
$mahasiswa = Mahasiswa::all(); // Mengambil semua data dari tabel mahasiswa
return view('mahasiswa.index', compact('mahasiswa'));
}
}
Mahasiswa::all(): Ini adalah metode Eloquent yang paling sederhana untuk mengambil semua data dari tabelmahasiswa.compact('mahasiswa'): Fungsi ini membuat array dengan kuncimahasiswadan nilai dari variabel$mahasiswa, yang kemudian kita kirimkan ke view.
View
Buat folder mahasiswa di dalam resources/views/ dan buat file index.blade.php di dalamnya.
resources/views/mahasiswa/index.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Data Mahasiswa</title>
</head>
<body>
<center><h3>Data Mahasiswa</h3></center>
<br/>
<a href="{{ route('mahasiswa.create') }}">Tambah Data Baru</a>
<br/>
<br/>
<table border="1">
<thead>
<tr>
<th>Nama</th>
<th>NIM</th>
<th>Jurusan</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
@foreach($mahasiswa as $m)
<tr>
<td>{{ $m->nama }}</td>
<td>{{ $m->nim }}</td>
<td>{{ $m->jurusan }}</td>
<td>
<a href="{{ route('mahasiswa.edit', $m->id) }}">Edit</a>
<a href="{{ route('mahasiswa.destroy', $m->id) }}"
onclick="event.preventDefault(); document.getElementById('delete-form-{{$m->id}}').submit();">Hapus</a>
<form id="delete-form-{{$m->id}}" action="{{ route('mahasiswa.destroy', $m->id) }}" method="POST" style="display: none;">
@csrf
@method('DELETE')
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
</body>
</html>
@foreach($mahasiswa as $m): Kita mengulang variabel$mahasiswayang dikirim dari controller.{{ $m->nama }}: Mengakses kolom tabel seperti properti objek. Ini adalah keajaiban Eloquent!
Route
Terakhir, definisikan rute di routes/web.php.
use App\Http\Controllers\MahasiswaController;
Route::get('mahasiswa', [MahasiswaController::class, 'index'])->name('mahasiswa.index');
Sekarang, Anda bisa mengakses URL /mahasiswa di browser untuk melihat daftar data mahasiswa.
Langkah 2: CREATE (Menambah Data)
Sekarang, kita buat fitur untuk menambahkan data baru.
Controller
Tambahkan dua metode di MahasiswaController.php.
public function create()
{
return view('mahasiswa.create');
}
public function store(Request $request)
{
$request->validate([
'nama' => 'required|max:255',
'nim' => 'required|max:20|unique:mahasiswa',
'jurusan' => 'required|max:255',
]);
Mahasiswa::create($request->all()); // Simpan data ke database
return redirect()->route('mahasiswa.index')->with('success', 'Data mahasiswa berhasil ditambahkan.');
}
create(): Metode ini hanya bertugas menampilkan form input.store(): Metode ini memvalidasi input dari form, lalu menggunakanMahasiswa::create()untuk menyimpan data. Metode ini sangat efisien karena langsung menggunakan semua data dari$request.
View
Buat file create.blade.php di dalam folder resources/views/mahasiswa/.
resources/views/mahasiswa/create.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Tambah Data Mahasiswa</title>
</head>
<body>
<center><h3>Tambah Data Mahasiswa</h3></center>
<br/>
<a href="{{ route('mahasiswa.index') }}">Kembali</a>
<br/>
<br/>
<form action="{{ route('mahasiswa.store') }}" method="POST">
@csrf
Nama: <input type="text" name="nama" required><br/>
NIM: <input type="text" name="nim" required><br/>
Jurusan: <input type="text" name="jurusan" required><br/>
<input type="submit" value="Simpan Data">
</form>
</body>
</html>
Route
Tambahkan rute baru di routes/web.php.
Route::get('mahasiswa/create', [MahasiswaController::class, 'create'])->name('mahasiswa.create');
Route::post('mahasiswa', [MahasiswaController::class, 'store'])->name('mahasiswa.store');
Langkah 3: UPDATE (Memperbarui Data)
Sekarang kita buat fitur untuk mengedit data.
Controller
Tambahkan dua metode lagi di MahasiswaController.php.
public function edit($id)
{
$mahasiswa = Mahasiswa::find($id); // Mencari data berdasarkan ID
return view('mahasiswa.edit', compact('mahasiswa'));
}
public function update(Request $request, $id)
{
$request->validate([
'nama' => 'required|max:255',
'nim' => 'required|max:20',
'jurusan' => 'required|max:255',
]);
$mahasiswa = Mahasiswa::find($id);
$mahasiswa->update($request->all()); // Perbarui data
return redirect()->route('mahasiswa.index')->with('success', 'Data mahasiswa berhasil diperbarui.');
}
edit($id): Metode ini mengambil data berdasarkan ID dan mengirimkannya ke view.update($id): Metode ini memvalidasi input, mencari data berdasarkan ID, dan menggunakan$mahasiswa->update()untuk memperbarui data.
View
Buat file edit.blade.php di resources/views/mahasiswa/.
resources/views/mahasiswa/edit.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Edit Data Mahasiswa</title>
</head>
<body>
<center><h3>Edit Data Mahasiswa</h3></center>
<br/>
<a href="{{ route('mahasiswa.index') }}">Kembali</a>
<br/>
<br/>
<form action="{{ route('mahasiswa.update', $mahasiswa->id) }}" method="POST">
@csrf
@method('PUT')
Nama: <input type="text" name="nama" value="{{ $mahasiswa->nama }}" required><br/>
NIM: <input type="text" name="nim" value="{{ $mahasiswa->nim }}" required><br/>
Jurusan: <input type="text" name="jurusan" value="{{ $mahasiswa->jurusan }}" required><br/>
<input type="submit" value="Update Data">
</form>
</body>
</html>
@method('PUT'): Laravel menggunakan metodePUTatauPATCHuntuk operasi update. Directive ini mengubah metode POST menjadi PUT.
Route
Tambahkan rute baru di routes/web.php.
Route::get('mahasiswa/{id}/edit', [MahasiswaController::class, 'edit'])->name('mahasiswa.edit');
Route::put('mahasiswa/{id}', [MahasiswaController::class, 'update'])->name('mahasiswa.update');
Langkah 4: DELETE (Menghapus Data)
Terakhir, kita buat fitur untuk menghapus data.
Controller
Tambahkan metode destroy di MahasiswaController.php.
public function destroy($id)
{
$mahasiswa = Mahasiswa::find($id);
$mahasiswa->delete(); // Hapus data
return redirect()->route('mahasiswa.index')->with('success', 'Data mahasiswa berhasil dihapus.');
}
destroy($id): Metode ini mencari data berdasarkan ID dan menggunakan$mahasiswa->delete()untuk menghapusnya.
Route
Tambahkan rute untuk operasi delete di routes/web.php.
Route::delete('mahasiswa/{id}', [MahasiswaController::class, 'destroy'])->name('mahasiswa.destroy');
Kesimpulan
Menggunakan Eloquent untuk operasi CRUD di Laravel sangatlah efisien dan intuitif. Eloquent mempermudah semua operasi database, mulai dari mengambil data hingga memperbarui dan menghapusnya, tanpa perlu menulis query SQL secara manual. Kode menjadi lebih bersih, mudah dibaca, dan cepat dikembangkan.
Dengan menguasai operasi dasar CRUD ini, Anda sudah memiliki fondasi yang kuat untuk membangun aplikasi web yang lebih kompleks dengan Laravel.