Logo
Laravel CRUD

Membangun Aplikasi CRUD Sederhana dengan Laravel 8

  • Coding
  • Alfin Ardiansyah
  • 03 Sep 2024

CRUD adalah singkatan dari Create, Read, Update, dan Delete, yang merupakan operasi dasar yang harus didukung oleh setiap aplikasi berbasis database. Laravel, sebagai salah satu framework PHP paling populer, menyediakan alat dan fitur yang memudahkan pengembang untuk membangun aplikasi CRUD dengan cepat dan efisien. Artikel ini akan memberikan panduan langkah demi langkah untuk membangun aplikasi CRUD menggunakan Laravel.

Persiapan Lingkungan Pengembangan

Sebelum memulai, pastikan bahwa lingkungan pengembangan sudah siap. Berikut adalah beberapa alat dan perangkat lunak yang perlu diinstal:

  1. Pastikan PHP versi terbaru sudah terpasang di sistem.
  2. Composer digunakan untuk mengelola dependensi Laravel.
  3. Instal Laravel menggunakan Composer dengan perintah composer global require laravel/installer.
  4. Anda bisa menggunakan MySQL, SQLite, atau database lain yang didukung oleh Laravel.

Baca Juga : Tutorial Install Composer

Setelah semua alat di atas terpasang, kita siap untuk memulai pembangunan aplikasi.

Langkah 1: Membuat Proyek Laravel Baru

Langkah pertama adalah membuat proyek Laravel baru. Gunakan perintah berikut untuk membuat proyek baru:

cd C:\XAMPP/htdocs/ 
laravel new nama-proyek

Setelah proyek berhasil dibuat, masuk ke direktori proyek dengan perintah :

cd nama-proyek

Langkah 2: Konfigurasi Database

Setelah membuat proyek, langkah berikutnya adalah mengonfigurasi database. Buka file .env di root proyek dan sesuaikan pengaturan database sesuai dengan konfigurasi lokal Anda:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=nama_database
DB_USERNAME=user_database
DB_PASSWORD=password_database

Jangan lupa untuk membuat database yang sesuai di server database Anda.

Langkah 3: Membuat Model dan Migrasi

Laravel memudahkan pembuatan tabel database melalui fitur migrasi. Kita akan membuat model beserta migrasinya untuk entitas yang kita kelola, misalnya Post:

php artisan make:model Post -m

Perintah ini akan membuat model Post dan file migrasi untuk tabel posts. Buka file migrasi di database/migrations/ dan tambahkan kolom yang diperlukan:

public function up()
{
    Schema::create('posts', function (Blueprint $table) {
        $table->id();
        $table->string('title');
        $table->text('content');
        $table->timestamps();
    });
}

Setelah itu, jalankan migrasi dengan perintah berikut untuk membuat tabel posts:

php artisan migrate

Langkah 4: Membuat Controller

Selanjutnya, kita akan membuat controller yang akan menangani operasi CRUD. Gunakan perintah berikut untuk membuat controller:

php artisan make:controller PostController --resource

Controller PostController ini sudah berisi metode dasar untuk operasi CRUD seperti index, create, store, show, edit, update, dan destroy.

Langkah 5: Membuat View dan Routing

Laravel menggunakan Blade sebagai templating engine untuk membuat tampilan. Buat file view di direktori resources/views untuk setiap operasi CRUD (misalnya index.blade.php, create.blade.php, dll.). Sesuaikan setiap view dengan kebutuhan tampilan aplikasi.

Kemudian, tambahkan rute di routes/web.php untuk menghubungkan controller dengan URL aplikasi:

Route::resource('posts', PostController::class);

Dengan rute ini, Laravel secara otomatis membuat rute untuk semua operasi CRUD yang sesuai dengan metode di PostController.

Langkah 6: Implementasi Operasi CRUD di Controller

Sekarang, kita perlu mengisi setiap metode di PostController untuk menangani logika CRUD. Sebagai contoh, berikut adalah implementasi untuk menyimpan data baru ke database:

public function index()
{
    // Mengambil semua data post dari database
    $posts = Post::paginate(10); // Menggunakan pagination

    // Mengirim data post ke view
    return view('posts.index', compact('posts'));
}
public function create()
{
    // Menampilkan form create
    return view('posts.create');
}
public function store(Request $request)
{
    // Validasi input data
    $validated = $request->validate([
        'title' => 'required|max:255',
        'content' => 'required',
    ]);

    // Menyimpan data ke database
    Post::create($validated);

    // Redirect ke halaman index dengan pesan sukses
    return redirect()->route('posts.index')->with('success', 'Post berhasil ditambahkan');
}
public function store(Request $request)
{
    // Validasi input data
    $validated = $request->validate([
        'title' => 'required|max:255',
        'content' => 'required',
    ]);

    // Menyimpan data ke database
    Post::create($validated);

    // Redirect ke halaman index dengan pesan sukses
    return redirect()->route('posts.index')->with('success', 'Post berhasil ditambahkan');
}
public function edit($id)
{
    // Mengambil data post berdasarkan ID
    $post = Post::findOrFail($id);

    // Menampilkan form edit dengan data post
    return view('posts.edit', compact('post'));
}
public function update(Request $request, $id)
{
    // Validasi input data
    $validated = $request->validate([
        'title' => 'required|max:255',
        'content' => 'required',
    ]);

    // Mengambil data post berdasarkan ID
    $post = Post::findOrFail($id);

    // Memperbarui data post
    $post->update($validated);

    // Redirect ke halaman index dengan pesan sukses
    return redirect()->route('posts.index')->with('success', 'Post berhasil diperbarui');
}
public function destroy($id)
{
    // Mengambil data post berdasarkan ID
    $post = Post::findOrFail($id);

    // Menghapus post dari database
    $post->delete();

    // Redirect ke halaman index dengan pesan sukses
    return redirect()->route('posts.index')->with('success', 'Post berhasil dihapus');
}

Lakukan hal yang sama untuk metode lainnya (index, show, edit, update, dan destroy) untuk mengelola data Post.

Tambahkan view index.blade.php, create.blade.php, dan edit.blade.php yang dapat digunakan dalam aplikasi Laravel untuk mengelola data Post.

View index.blade.php :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Daftar Post</title>
    <link rel="stylesheet" href="{{ asset('css/app.css') }}">
</head>
<body>
    <div class="container mt-5">
        <h1>Daftar Post</h1>

        <!-- Pesan sukses -->
        @if(session('success'))
            <div class="alert alert-success">
                {{ session('success') }}
            </div>
        @endif

        <!-- Tombol untuk menambah post baru -->
        <a href="{{ route('posts.create') }}" class="btn btn-primary mb-3">Tambah Post Baru</a>

        <!-- Tabel untuk menampilkan daftar post -->
        <table class="table table-bordered">
            <thead>
                <tr>
                    <th>No</th>
                    <th>Judul</th>
                    <th>Konten</th>
                    <th>Aksi</th>
                </tr>
            </thead>
            <tbody>
                @foreach($posts as $post)
                <tr>
                    <td>{{ $loop->iteration }}</td>
                    <td>{{ $post->title }}</td>
                    <td>{{ Str::limit($post->content, 50) }}</td>
                    <td>
                        <!-- Tombol aksi untuk melihat, mengedit, dan menghapus post -->
                        <a href="{{ route('posts.show', $post->id) }}" class="btn btn-info">Lihat</a>
                        <a href="{{ route('posts.edit', $post->id) }}" class="btn btn-warning">Edit</a>
                        <form action="{{ route('posts.destroy', $post->id) }}" method="POST" style="display:inline;">
                            @csrf
                            @method('DELETE')
                            <button type="submit" class="btn btn-danger" onclick="return confirm('Apakah Anda yakin ingin menghapus post ini?');">Hapus</button>
                        </form>
                    </td>
                </tr>
                @endforeach
            </tbody>
        </table>

        <!-- Pagination -->
        {{ $posts->links() }}
    </div>
</body>
</html>

View create.blade.php :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Tambah Post Baru</title>
    <link rel="stylesheet" href="{{ asset('css/app.css') }}">
</head>
<body>
    <div class="container mt-5">
        <h1>Tambah Post Baru</h1>

        <!-- Form untuk menambah post -->
        <form action="{{ route('posts.store') }}" method="POST">
            @csrf

            <!-- Input untuk judul post -->
            <div class="form-group">
                <label for="title">Judul</label>
                <input type="text" name="title" class="form-control" id="title" value="{{ old('title') }}">
                @error('title')
                    <div class="text-danger">{{ $message }}</div>
                @enderror
            </div>

            <!-- Input untuk konten post -->
            <div class="form-group">
                <label for="content">Konten</label>
                <textarea name="content" class="form-control" id="content">{{ old('content') }}</textarea>
                @error('content')
                    <div class="text-danger">{{ $message }}</div>
                @enderror
            </div>

            <!-- Tombol untuk submit form -->
            <button type="submit" class="btn btn-primary">Simpan</button>
        </form>
    </div>
</body>
</html>

View 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 Post</title>
    <link rel="stylesheet" href="{{ asset('css/app.css') }}">
</head>
<body>
    <div class="container mt-5">
        <h1>Edit Post</h1>

        <!-- Form untuk mengedit post -->
        <form action="{{ route('posts.update', $post->id) }}" method="POST">
            @csrf
            @method('PUT')

            <!-- Input untuk judul post -->
            <div class="form-group">
                <label for="title">Judul</label>
                <input type="text" name="title" class="form-control" id="title" value="{{ old('title', $post->title) }}">
                @error('title')
                    <div class="text-danger">{{ $message }}</div>
                @enderror
            </div>

            <!-- Input untuk konten post -->
            <div class="form-group">
                <label for="content">Konten</label>
                <textarea name="content" class="form-control" id="content">{{ old('content', $post->content) }}</textarea>
                @error('content')
                    <div class="text-danger">{{ $message }}</div>
                @enderror
            </div>

            <!-- Tombol untuk submit form -->
            <button type="submit" class="btn btn-primary">Simpan Perubahan</button>
        </form>
    </div>
</body>
</html>

Jangan lupa untuk menambahkan file dan code untuk cssnya, buat file bernama app.css :

/* General Styles */
body {
    font-family: 'Arial', sans-serif;
    background-color: #f4f4f4;
    color: #333;
    margin: 0;
    padding: 0;
}

.container {
    max-width: 800px;
    margin: 0 auto;
    padding: 20px;
    background-color: #fff;
    box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}

/* Heading Styles */
h1 {
    font-size: 2em;
    margin-bottom: 20px;
    color: #444;
}

/* Table Styles */
table {
    width: 100%;
    border-collapse: collapse;
    margin-bottom: 20px;
}

table, th, td {
    border: 1px solid #ddd;
}

th, td {
    padding: 10px;
    text-align: left;
}

th {
    background-color: #f4f4f4;
    font-weight: bold;
}

/* Button Styles */
.btn {
    display: inline-block;
    padding: 10px 15px;
    font-size: 1em;
    color: #fff;
    text-align: center;
    text-decoration: none;
    border-radius: 5px;
    margin-right: 5px;
}

.btn-primary {
    background-color: #007bff;
}

.btn-primary:hover {
    background-color: #0056b3;
}

.btn-info {
    background-color: #17a2b8;
}

.btn-info:hover {
    background-color: #117a8b;
}

.btn-warning {
    background-color: #ffc107;
}

.btn-warning:hover {
    background-color: #e0a800;
}

.btn-danger {
    background-color: #dc3545;
}

.btn-danger:hover {
    background-color: #c82333;
}

/* Form Styles */
.form-group {
    margin-bottom: 15px;
}

label {
    display: block;
    font-weight: bold;
    margin-bottom: 5px;
}

input[type="text"],
textarea {
    width: 100%;
    padding: 10px;
    border: 1px solid #ddd;
    border-radius: 5px;
    box-sizing: border-box;
}

input[type="text"]:focus,
textarea:focus {
    border-color: #007bff;
    outline: none;
}

textarea {
    height: 150px;
}

/* Alert Styles */
.alert {
    padding: 10px;
    color: #fff;
    margin-bottom: 20px;
    border-radius: 5px;
}

.alert-success {
    background-color: #28a745;
}

.text-danger {
    color: #dc3545;
    font-size: 0.9em;
}

Demikian panduan langkah-langkah CRUD sederhana dengan laravel, baca Artikel lainya di RuangBacaku