Tutorial Membuat CRUD di Laravel

Posted on 14 August 2024


Membuat aplikasi CRUD (Create, Read, Update, Delete) lengkap di Laravel melibatkan beberapa langkah penting. CRUD adalah dasar dari banyak aplikasi web, dan Laravel menyediakan berbagai alat dan fitur untuk membuat proses ini sederhana dan efisien. Berikut adalah tutorial lengkap tentang cara membuat aplikasi CRUD di Laravel.

Persyaratan

1. Menyiapkan Proyek Laravel

Jika Anda belum memiliki proyek Laravel, buatlah proyek baru dengan Composer.

Untuk tutorial membuat Proyek Composer anda dapat melihat tutorialnya disini.

2. Mengkonfigurasi Database

Konfigurasi database adalah salah satu aspek penting dalam pengembangan aplikasi web atau perangkat lunak. Dalam konteks Laravel atau sistem berbasis PHP lainnya, konfigurasi database melibatkan pengaturan koneksi antara aplikasi dan sistem manajemen basis data (DBMS) seperti MySQL, PostgreSQL, SQLite, atau SQL Server.

Untuk informasi lebih lengkapnya anda bisa akses link diatas karna sudah lengkap dengan Konfigurasinya.

3. Membuat Migration

Migration dalam pengembangan perangkat lunak, khususnya dalam konteks Laravel dan framework serupa, adalah fitur penting yang memungkinkan pengelolaan dan pelacakan perubahan struktur database secara efisien. 

Bagaimana cara dan tutorial Migration? bisa anda akses disini.

jika sudah mengikuti persyaratannya anda bisa mengikuti tutorial berikt:

  • Membuat Model

Model di Laravel mewakili tabel di database. Buat model NamaModel anda juga bisa menyesuaikan NamaModel dengan NamaProyekAnda sebagai Contoh saya menggunakan NamaModel dengan Matakuliah :

php artisan make:model Matakuliah

Model ini akan berada di app/Models/Matakuliah.php. Secara default, Laravel akan mengasosiasikan model ini dengan tabel Matakuliah di database.

Edit isi Model app/Models/Matakuliah.php sesuaikan dengan yang anda butuhkan:

Contoh Model:

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class MataKuliah extends Model
{
    use HasFactory, SoftDeletes;
    protected $table = 'md_matakuliah';
    protected $fillable = [
        'CodeMataKuliah', 'NamaMataKuliah',
    ];
    protected $dates = ['deleted_at'];
    public function mahasiswaMatakuliah()
    {
        return $this->hasMany(MahasiswaMatakuliah::class, 'matakuliah_id');
    }
}

  • Membuat Controller

Controller menangani logika aplikasi. Buat controller untuk Matakuliah dengan resource methods:

php artisan make:controller MatakuliahController

Controller ini akan berada di app/Http/Controllers/MatakuliahController.php. Laravel membuat metode CRUD dasar seperti index, create, store, show, edit, update, dan destroy di dalam controller.

Edit isi app/Http/Controllers/MatakuliahController.phpsesuaikan dengan proyek yang anda akan buat:

Contoh Controller:

use App\Models\Matakuliah;
use Illuminate\Http\Request;

class MataKuliahController extends Controller
{
    public function index()
    {
        $matakuliah = Matakuliah::paginate(10); // Mengambil data dengan pagination, 10 item per halaman
        return view('matakuliah.index', compact('matakuliah'));
    }

    public function create()
    {
        // Ambil kode mata kuliah terakhir dari database
        $lastCode = Matakuliah::latest('created_at')->first()->CodeMataKuliah ?? 'MTK0000';

        // Ambil nomor terakhir dari kode
        $lastNumber = intval(substr($lastCode, 3)) ?? 0;

        // Generate kode baru
        $newNumber = $lastNumber + 1;
        $newCode = 'MTK' . str_pad($newNumber, 4, '0', STR_PAD_LEFT);

        // Pastikan kode baru belum ada di database
        while (Matakuliah::where('CodeMataKuliah', $newCode)->exists()) {
            $newNumber++;
            $newCode = 'MTK' . str_pad($newNumber, 4, '0', STR_PAD_LEFT);
        }

        // Pass kode baru ke view
        return view('matakuliah.create', ['newCode' => $newCode]);
    }

    public function store(Request $request)
    {
        // Validasi input
        $request->validate([
            'CodeMataKuliah' => 'required|unique:md_matakuliah,CodeMataKuliah',
            'NamaMataKuliah' => 'required|unique:md_matakuliah,NamaMataKuliah',
        ]);

        // Simpan data jika valid
        $matakuliah = new Matakuliah();
        $matakuliah->CodeMataKuliah = $request->CodeMataKuliah;
        $matakuliah->NamaMataKuliah = $request->NamaMataKuliah;
        $matakuliah->save();

        return redirect()->route('matakuliah.index')->with('success', 'Mata kuliah berhasil ditambahkan.');
    }
public function edit($id)
    {
        $matakuliah = Matakuliah::findOrFail($id);
        return view('matakuliah.edit', compact('matakuliah'));
    }

    public function update(Request $request, $id)
    {
        $request->validate([
            'CodeMataKuliah' => 'required|unique:md_matakuliah,CodeMataKuliah,' . $id,
            'NamaMataKuliah' => 'required',
        ]);

        $matakuliah = Matakuliah::findOrFail($id);
        $matakuliah->update($request->all());

        return redirect()->route('matakuliah.index')
            ->with('success', 'Mata Kuliah updated successfully.');
    }

    public function destroy($id)
    {
        $matakuliah = Matakuliah::findOrFail($id);
        $matakuliah->delete();

        return redirect()->route('matakuliah.index')
            ->with('success', 'Mata Kuliah deleted successfully.');
    }

    // Menampilkan data yang dihapus
    public function trash()
    {
        $matakuliah = Matakuliah::onlyTrashed()->get();
        return view('matakuliah.trash', compact('matakuliah'));
    }

    public function restore($id)
    {
        $matakuliah = Matakuliah::onlyTrashed()->findOrFail($id);
        $matakuliah->restore();

        return redirect()->route('matakuliah.trash')
            ->with('success', 'Mata Kuliah restored successfully.');
    }

    public function forceDelete($id)
    {
        $matakuliah = Matakuliah::onlyTrashed()->findOrFail($id);
        $matakuliah->forceDelete();

        return redirect()->route('matakuliah.trash')
            ->with('success', 'Mata Kuliah permanently deleted.');
    }
}


  • Membuat Rute

Tambahkan rute untuk resource controller di file routes/web.php:

use App\Http\Controllers\MataKuliahController;

// Rute Mata Kuliah
Route::resource('matakuliah', MataKuliahController::class)->except(['show']);
Route::get('/matakuliah/trash', [MataKuliahController::class, 'trash'])->name('matakuliah.trash');
Route::post('/matakuliah/{id}/restore', [MataKuliahController::class, 'restore'])->name('matakuliah.restore');
Route::delete('/matakuliah/{id}/force-delete', [MataKuliahController::class, 'forceDelete'])->name('matakuliah.forceDelete');

Rute ini akan membuat semua rute yang diperlukan untuk operasi CRUD berdasarkan nama metode di MatakuliahController.