m.techreview.click
  • Website
  • Indonesia
  • Laravel
  • Hosting
  • AI
  • Development
No Result
View All Result
m.techreview.click
  • Website
  • Indonesia
  • Laravel
  • Hosting
  • AI
  • Development
No Result
View All Result
m.techreview.click
No Result
View All Result
Home Database

Cara Membuat CRUD dengan Laravel 9: Database Website Lebih Dinamis

Jasper by Jasper
April 19, 2025
in Database, Development, Laravel, Tutorial, Website
0
Share on FacebookShare on Twitter

Laravel 9 adalah framework PHP yang powerful dan populer untuk membangun aplikasi web modern. Salah satu keuntungan utama menggunakan Laravel adalah kemudahannya dalam mengelola data melalui operasi CRUD (Create, Read, Update, Delete). CRUD adalah fondasi dari banyak aplikasi web yang dinamis, memungkinkan pengguna untuk berinteraksi dan memanipulasi data secara efisien. Artikel ini akan memandu Anda langkah demi langkah dalam cara membuat CRUD dengan Laravel 9 agar database website Anda menjadi lebih dinamis dan interaktif.

1. Apa Itu CRUD dan Mengapa Penting dalam Laravel 9?

CRUD adalah singkatan dari Create (membuat data baru), Read (membaca atau menampilkan data), Update (memperbarui data yang sudah ada), dan Delete (menghapus data). Operasi ini adalah dasar dari interaksi pengguna dengan data dalam aplikasi web. Tanpa CRUD, website Anda hanya akan menampilkan informasi statis, tanpa kemampuan untuk menambahkan, mengubah, atau menghapus data.

Dalam konteks Laravel 9, CRUD dipermudah dengan fitur-fitur bawaan seperti:

  • Eloquent ORM: Mempermudah interaksi dengan database menggunakan sintaks PHP yang intuitif.
  • Migrations: Membantu mengelola skema database secara terstruktur dan terorganisir.
  • Controllers: Mengorganisir logika aplikasi, termasuk operasi CRUD.
  • Routes: Menentukan bagaimana permintaan (request) diarahkan ke controller yang sesuai.
  • Blade Templating Engine: Mempermudah pembuatan tampilan (view) yang dinamis.

Menguasai cara membuat CRUD dengan Laravel 9 adalah kunci untuk mengembangkan aplikasi web yang dinamis, responsif, dan mudah dikelola. Ini akan memungkinkan Anda untuk:

Related Post

Membuat API Authentication dengan Laravel Sanctum: Panduan Lengkap

June 26, 2025

Top 5 Package Laravel yang Mempermudah Pengembangan Website Anda

June 26, 2025

Cara Menggunakan Laravel Eloquent untuk Query Database: Panduan Lengkap

June 25, 2025

Tutorial Membuat CRUD dengan Laravel untuk Pemula: Step-by-Step

June 25, 2025
  • Membuat sistem manajemen konten (CMS).
  • Membangun aplikasi e-commerce.
  • Mengembangkan aplikasi sosial media.
  • Mengelola data pengguna dan informasi lainnya.

2. Persiapan Awal: Instalasi Laravel 9 dan Konfigurasi Database

Sebelum memulai cara membuat CRUD dengan Laravel 9, pastikan Anda sudah memiliki lingkungan pengembangan yang siap. Ini termasuk:

  • PHP: Versi 8.0 atau lebih tinggi.
  • Composer: Package manager untuk PHP.
  • Database: MySQL, PostgreSQL, SQLite, atau database yang didukung Laravel lainnya.
  • Web Server: Apache atau Nginx.

Setelah memastikan persyaratan terpenuhi, ikuti langkah-langkah berikut:

  1. Instal Laravel 9: Buka terminal atau command prompt Anda dan jalankan perintah berikut:

    composer create-project laravel/laravel:^9.0 nama-proyek
    cd nama-proyek

    Ganti nama-proyek dengan nama proyek yang Anda inginkan.

  2. Konfigurasi Database: Buka file .env di direktori proyek Anda. Temukan bagian yang berhubungan dengan konfigurasi database dan sesuaikan dengan kredensial database Anda. Contoh konfigurasi untuk MySQL:

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

    Ganti nama_database, username_database, dan password_database dengan informasi yang sesuai.

  3. Migrasi Database: Laravel menggunakan migrations untuk mengelola skema database. Secara default, Laravel sudah memiliki beberapa migrations bawaan. Anda dapat menjalankan migrations ini dengan perintah:

    php artisan migrate

    Perintah ini akan membuat tabel users, password_resets, dan failed_jobs di database Anda.

3. Membuat Model dan Migrasi: Definisi Struktur Data

Langkah selanjutnya dalam cara membuat CRUD dengan Laravel 9 adalah mendefinisikan struktur data yang akan Anda kelola. Mari kita ambil contoh sederhana: mengelola data “Produk”. Kita perlu membuat model dan migrasi untuk tabel products.

  1. Membuat Model: Gunakan perintah Artisan untuk membuat model Product:

    php artisan make:model Product

    Perintah ini akan membuat file app/Models/Product.php.

  2. Membuat Migrasi: Sekarang, buat migrasi untuk tabel products:

    php artisan make:migration create_products_table

    Perintah ini akan membuat file migrasi baru di direktori database/migrations. Buka file migrasi tersebut dan definisikan skema tabel products. Contoh:

    <?php
    
    use IlluminateDatabaseMigrationsMigration;
    use IlluminateDatabaseSchemaBlueprint;
    use IlluminateSupportFacadesSchema;
    
    return new class extends Migration
    {
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            Schema::create('products', function (Blueprint $table) {
                $table->id();
                $table->string('name');
                $table->text('description')->nullable();
                $table->decimal('price', 10, 2);
                $table->integer('stock');
                $table->timestamps();
            });
        }
    
        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
            Schema::dropIfExists('products');
        }
    };

    Pada kode di atas:

    • $table->id(); membuat kolom id sebagai primary key auto-increment.
    • $table->string('name'); membuat kolom name dengan tipe data string.
    • $table->text('description')->nullable(); membuat kolom description dengan tipe data text yang bisa bernilai null.
    • $table->decimal('price', 10, 2); membuat kolom price dengan tipe data decimal (10 digit total, 2 digit di belakang koma).
    • $table->integer('stock'); membuat kolom stock dengan tipe data integer.
    • $table->timestamps(); membuat kolom created_at dan updated_at untuk menyimpan informasi timestamp.
  3. Menjalankan Migrasi: Setelah mendefinisikan skema tabel, jalankan migrasi untuk membuat tabel products di database Anda:

    php artisan migrate
  4. Mass Assignment pada Model: Buka file app/Models/Product.php dan tambahkan $fillable property untuk mengizinkan mass assignment (mengisi data secara massal):

    <?php
    
    namespace AppModels;
    
    use IlluminateDatabaseEloquentFactoriesHasFactory;
    use IlluminateDatabaseEloquentModel;
    
    class Product extends Model
    {
        use HasFactory;
    
        protected $fillable = [
            'name',
            'description',
            'price',
            'stock',
        ];
    }

    Dengan menambahkan $fillable, Anda menentukan kolom mana saja yang boleh diisi melalui mass assignment. Ini penting untuk keamanan aplikasi Anda.

4. Membuat Controller: Logika Bisnis CRUD

Setelah model dan migrasi dibuat, saatnya untuk membuat controller yang akan menangani logika bisnis CRUD.

  1. Membuat Controller: Gunakan perintah Artisan untuk membuat controller ProductController:

    php artisan make:controller ProductController

    Perintah ini akan membuat file app/Http/Controllers/ProductController.php.

  2. Implementasi Fungsi CRUD: Buka file app/Http/Controllers/ProductController.php dan tambahkan fungsi-fungsi CRUD:

    <?php
    
    namespace AppHttpControllers;
    
    use AppModelsProduct;
    use IlluminateHttpRequest;
    
    class ProductController extends Controller
    {
        /**
         * Display a listing of the resource.
         *
         * @return IlluminateHttpResponse
         */
        public function index()
        {
            $products = Product::all();
            return view('products.index', compact('products'));
        }
    
        /**
         * Show the form for creating a new resource.
         *
         * @return IlluminateHttpResponse
         */
        public function create()
        {
            return view('products.create');
        }
    
        /**
         * Store a newly created resource in storage.
         *
         * @param  IlluminateHttpRequest  $request
         * @return IlluminateHttpResponse
         */
        public function store(Request $request)
        {
            $request->validate([
                'name' => 'required',
                'price' => 'required|numeric',
                'stock' => 'required|integer',
            ]);
    
            Product::create($request->all());
    
            return redirect()->route('products.index')
                            ->with('success','Product created successfully.');
        }
    
        /**
         * Display the specified resource.
         *
         * @param  AppModelsProduct  $product
         * @return IlluminateHttpResponse
         */
        public function show(Product $product)
        {
            return view('products.show',compact('product'));
        }
    
        /**
         * Show the form for editing the specified resource.
         *
         * @param  AppModelsProduct  $product
         * @return IlluminateHttpResponse
         */
        public function edit(Product $product)
        {
            return view('products.edit',compact('product'));
        }
    
        /**
         * Update the specified resource in storage.
         *
         * @param  IlluminateHttpRequest  $request
         * @param  AppModelsProduct  $product
         * @return IlluminateHttpResponse
         */
        public function update(Request $request, Product $product)
        {
            $request->validate([
                'name' => 'required',
                'price' => 'required|numeric',
                'stock' => 'required|integer',
            ]);
    
            $product->update($request->all());
    
            return redirect()->route('products.index')
                            ->with('success','Product updated successfully');
        }
    
        /**
         * Remove the specified resource from storage.
         *
         * @param  AppModelsProduct  $product
         * @return IlluminateHttpResponse
         */
        public function destroy(Product $product)
        {
            $product->delete();
    
            return redirect()->route('products.index')
                            ->with('success','Product deleted successfully');
        }
    }

    Penjelasan fungsi:

    • index(): Menampilkan daftar semua produk. Mengambil data dari database menggunakan Product::all() dan mengirimkannya ke view products.index.
    • create(): Menampilkan form untuk membuat produk baru. Menampilkan view products.create.
    • store(Request $request): Menyimpan produk baru ke database. Melakukan validasi input menggunakan $request->validate(), kemudian membuat produk baru menggunakan Product::create($request->all()). Setelah berhasil, redirect ke halaman products.index dengan pesan sukses.
    • show(Product $product): Menampilkan detail satu produk. Mengirim data produk ke view products.show.
    • edit(Product $product): Menampilkan form untuk mengedit produk yang sudah ada. Mengirim data produk ke view products.edit.
    • update(Request $request, Product $product): Memperbarui produk di database. Melakukan validasi input menggunakan $request->validate(), kemudian memperbarui produk menggunakan $product->update($request->all()). Setelah berhasil, redirect ke halaman products.index dengan pesan sukses.
    • destroy(Product $product): Menghapus produk dari database. Menghapus produk menggunakan $product->delete(). Setelah berhasil, redirect ke halaman products.index dengan pesan sukses.

5. Membuat Routes: Menentukan Alur Permintaan

Langkah selanjutnya dalam cara membuat CRUD dengan Laravel 9 adalah menentukan bagaimana permintaan (request) diarahkan ke controller yang sesuai. Kita akan menggunakan resource routing untuk mempermudah definisi routes CRUD.

Buka file routes/web.php dan tambahkan kode berikut:

<?php

use IlluminateSupportFacadesRoute;
use AppHttpControllersProductController;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});

Route::resource('products', ProductController::class);

Route::resource('products', ProductController::class); akan secara otomatis membuat routes untuk semua fungsi CRUD di ProductController:

  • GET /products -> ProductController@index
  • GET /products/create -> ProductController@create
  • POST /products -> ProductController@store
  • GET /products/{product} -> ProductController@show
  • GET /products/{product}/edit -> ProductController@edit
  • PUT/PATCH /products/{product} -> ProductController@update
  • DELETE /products/{product} -> ProductController@destroy

6. Membuat Views: Menampilkan Data dan Form Input

Langkah terakhir dalam cara membuat CRUD dengan Laravel 9 adalah membuat views untuk menampilkan data dan form input. Kita akan membuat view untuk menampilkan daftar produk, form untuk membuat produk baru, form untuk mengedit produk, dan detail produk.

Buat direktori resources/views/products dan buat file-file berikut:

  • index.blade.php (Menampilkan daftar produk):

    <!DOCTYPE html>
    <html>
    <head>
        <title>Products</title>
        <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
    </head>
    <body>
        <div class="container">
            <h1>Daftar Produk</h1>
            <a href="{{ route('products.create') }}" class="btn btn-success mb-3">Create New Product</a>
    
            @if ($message = Session::get('success'))
                <div class="alert alert-success">
                    <p>{{ $message }}</p>
                </div>
            @endif
    
            <table class="table table-bordered">
                <tr>
                    <th>No</th>
                    <th>Name</th>
                    <th>Price</th>
                    <th>Stock</th>
                    <th width="280px">Action</th>
                </tr>
                @foreach ($products as $product)
                <tr>
                    <td>{{ ++$i }}</td>
                    <td>{{ $product->name }}</td>
                    <td>{{ $product->price }}</td>
                    <td>{{ $product->stock }}</td>
                    <td>
                        <form action="{{ route('products.destroy',$product->id) }}" method="POST">
                            <a class="btn btn-info" href="{{ route('products.show',$product->id) }}">Show</a>
                            <a class="btn btn-primary" href="{{ route('products.edit',$product->id) }}">Edit</a>
    
                            @csrf
                            @method('DELETE')
    
                            <button type="submit" class="btn btn-danger">Delete</button>
                        </form>
                    </td>
                </tr>
                @endforeach
            </table>
    
            {!! $products->links() !!}
        </div>
    </body>
    </html>
  • create.blade.php (Form untuk membuat produk baru):

    <!DOCTYPE html>
    <html>
    <head>
        <title>Create Product</title>
        <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
    </head>
    <body>
        <div class="container">
            <h1>Create New Product</h1>
    
            @if ($errors->any())
                <div class="alert alert-danger">
                    <strong>Whoops!</strong> There were some problems with your input.<br><br>
                    <ul>
                        @foreach ($errors->all() as $error)
                            <li>{{ $error }}</li>
                        @endforeach
                    </ul>
                </div>
            @endif
    
            <form action="{{ route('products.store') }}" method="POST">
                @csrf
    
                <div class="mb-3">
                    <label for="name" class="form-label">Name:</label>
                    <input type="text" class="form-control" id="name" name="name" placeholder="Name">
                </div>
                <div class="mb-3">
                    <label for="description" class="form-label">Description:</label>
                    <textarea class="form-control" style="height:150px" name="description" placeholder="Description"></textarea>
                </div>
                <div class="mb-3">
                    <label for="price" class="form-label">Price:</label>
                    <input type="text" class="form-control" id="price" name="price" placeholder="Price">
                </div>
                <div class="mb-3">
                    <label for="stock" class="form-label">Stock:</label>
                    <input type="text" class="form-control" id="stock" name="stock" placeholder="Stock">
                </div>
    
                <button type="submit" class="btn btn-primary">Submit</button>
                <a class="btn btn-secondary" href="{{ route('products.index') }}">Back</a>
            </form>
        </div>
    </body>
    </html>
  • edit.blade.php (Form untuk mengedit produk):

    <!DOCTYPE html>
    <html>
    <head>
        <title>Edit Product</title>
        <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
    </head>
    <body>
        <div class="container">
            <h1>Edit Product</h1>
    
            @if ($errors->any())
                <div class="alert alert-danger">
                    <strong>Whoops!</strong> There were some problems with your input.<br><br>
                    <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 class="mb-3">
                    <label for="name" class="form-label">Name:</label>
                    <input type="text" class="form-control" id="name" name="name" value="{{ $product->name }}" placeholder="Name">
                </div>
                <div class="mb-3">
                    <label for="description" class="form-label">Description:</label>
                    <textarea class="form-control" style="height:150px" name="description" placeholder="Description">{{ $product->description }}</textarea>
                </div>
                <div class="mb-3">
                    <label for="price" class="form-label">Price:</label>
                    <input type="text" class="form-control" id="price" name="price" value="{{ $product->price }}" placeholder="Price">
                </div>
                <div class="mb-3">
                    <label for="stock" class="form-label">Stock:</label>
                    <input type="text" class="form-control" id="stock" name="stock" value="{{ $product->stock }}" placeholder="Stock">
                </div>
    
                <button type="submit" class="btn btn-primary">Submit</button>
                <a class="btn btn-secondary" href="{{ route('products.index') }}">Back</a>
            </form>
        </div>
    </body>
    </html>
  • show.blade.php (Detail produk):

    <!DOCTYPE html>
    <html>
    <head>
        <title>Show Product</title>
        <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
    </head>
    <body>
        <div class="container">
            <h1>Show Product</h1>
    
            <div class="mb-3">
                <strong>Name:</strong>
                {{ $product->name }}
            </div>
            <div class="mb-3">
                <strong>Description:</strong>
                {{ $product->description }}
            </div>
            <div class="mb-3">
                <strong>Price:</strong>
                {{ $product->price }}
            </div>
            <div class="mb-3">
                <strong>Stock:</strong>
                {{ $product->stock }}
            </div>
    
            <a class="btn btn-secondary" href="{{ route('products.index') }}">Back</a>
        </div>
    </body>
    </html>

Penjelasan View:

  • Masing-masing view menggunakan Bootstrap untuk styling agar tampilan lebih menarik. Anda bisa mengganti styling sesuai kebutuhan.
  • View index.blade.php menampilkan daftar produk dalam bentuk tabel. Terdapat link untuk membuat produk baru, melihat detail produk, mengedit produk, dan menghapus produk.
  • View create.blade.php dan edit.blade.php menampilkan form dengan input untuk nama, deskripsi, harga, dan stok produk. Form ini mengirimkan data ke controller untuk diproses.
  • View show.blade.php menampilkan detail informasi produk.
  • Semua view menggunakan Blade templating engine Laravel untuk menampilkan data dinamis dan membuat link ke routes yang sesuai.

7. Uji Coba Aplikasi CRUD Laravel 9 Anda

Setelah semua langkah di atas selesai, Anda dapat menguji coba aplikasi CRUD Laravel 9 Anda. Jalankan server pengembangan Laravel:

php artisan serve

Buka browser Anda dan kunjungi http://localhost:8000/products. Anda akan melihat halaman daftar produk. Anda dapat mencoba membuat produk baru, mengedit produk, melihat detail produk, dan menghapus produk.

8. Validasi Data: Meningkatkan Keamanan dan Integritas Data

Validasi data adalah bagian penting dalam cara membuat CRUD dengan Laravel 9 untuk memastikan data yang disimpan di database valid dan sesuai dengan aturan yang telah ditentukan. Kita telah melihat sedikit contoh validasi di dalam fungsi store dan update di ProductController. Mari kita bahas lebih detail tentang validasi data di Laravel.

Laravel menyediakan berbagai cara untuk melakukan validasi data, termasuk:

  • Validasi Langsung di Controller: Seperti yang sudah kita lakukan sebelumnya, Anda dapat menggunakan method $request->validate() di dalam controller untuk melakukan validasi.
  • Form Request: Membuat class khusus untuk menangani validasi form. Ini membuat kode controller Anda lebih bersih dan terorganisir.
  • Custom Validation Rules: Membuat aturan validasi sendiri jika aturan bawaan Laravel tidak mencukupi.

Contoh menggunakan Form Request:

  1. Buat Form Request: Gunakan perintah Artisan untuk membuat Form Request ProductRequest:

    php artisan make:request ProductRequest

    Perintah ini akan membuat file app/Http/Requests/ProductRequest.php.

  2. Definisikan Aturan Validasi: Buka file app/Http/Requests/ProductRequest.php dan definisikan aturan validasi di method rules():

    <?php
    
    namespace AppHttpRequests;
    
    use IlluminateFoundationHttpFormRequest;
    
    class ProductRequest extends FormRequest
    {
        /**
         * Determine if the user is authorized to make this request.
         *
         * @return bool
         */
        public function authorize()
        {
            return true; // Ubah menjadi true jika tidak ada otorisasi khusus
        }
    
        /**
         * Get the validation rules that apply to the request.
         *
         * @return array<string, mixed>
         */
        public function rules()
        {
            return [
                'name' => 'required|max:255',
                'description' => 'nullable',
                'price' => 'required|numeric|min:0',
                'stock' => 'required|integer|min:0',
            ];
        }
    }

    Pada kode di atas:

    • 'name' => 'required|max:255' berarti kolom name wajib diisi (required) dan panjang maksimal 255 karakter.
    • 'description' => 'nullable' berarti kolom description boleh tidak diisi (nullable).
    • 'price' => 'required|numeric|min:0' berarti kolom price wajib diisi (required), harus berupa angka (numeric), dan minimal 0.
    • 'stock' => 'required|integer|min:0' berarti kolom stock wajib diisi (required), harus berupa integer, dan minimal 0.
  3. Gunakan Form Request di Controller: Ubah store dan update method di ProductController untuk menggunakan ProductRequest:

    <?php
    
    namespace AppHttpControllers;
    
    use AppModelsProduct;
    use AppHttpRequestsProductRequest; // Import ProductRequest
    use IlluminateHttpRequest;
    
    class ProductController extends Controller
    {
        // ... (kode sebelumnya)
    
        public function store(ProductRequest $request) // Gunakan ProductRequest
        {
            Product::create($request->all());
    
            return redirect()->route('products.index')
                            ->with('success','Product created successfully.');
        }
    
        public function update(ProductRequest $request, Product $product) // Gunakan ProductRequest
        {
            $product->update($request->all());
    
            return redirect()->route('products.index')
                            ->with('success','Product updated successfully');
        }
    
        // ... (kode sebelumnya)
    }

    Dengan menggunakan Form Request, Laravel akan otomatis menjalankan validasi berdasarkan aturan yang telah Anda definisikan di ProductRequest. Jika validasi gagal, Laravel akan otomatis redirect kembali ke halaman sebelumnya dengan pesan error.

9. Otentikasi dan Otorisasi: Mengamankan Aplikasi CRUD Anda

Otentikasi dan otorisasi adalah aspek penting dalam cara membuat CRUD dengan Laravel 9 untuk memastikan hanya pengguna yang berwenang yang dapat mengakses dan memanipulasi data.

  • Otentikasi: Proses memverifikasi identitas pengguna (misalnya, dengan menggunakan username dan password).
  • Otorisasi: Proses menentukan apa yang boleh dilakukan oleh pengguna setelah berhasil diotentikasi (misalnya, hanya admin yang boleh menghapus produk).

Laravel menyediakan fitur otentikasi bawaan yang mudah digunakan.

  1. Generate Scaffold Otentikasi: Jalankan perintah berikut untuk membuat scaffold otentikasi:

    composer require laravel/ui
    php artisan ui:auth
    npm install && npm run dev
    php artisan migrate

    Perintah ini akan membuat routes, controller, dan view untuk login, register, dan reset password. Pastikan Anda sudah menjalankan php artisan migrate setelah menjalankan perintah di atas.

  2. Gunakan Middleware auth: Lindungi routes yang memerlukan otentikasi dengan menggunakan middleware auth. Buka file routes/web.php dan tambahkan middleware auth ke routes products:

    <?php
    
    use IlluminateSupportFacadesRoute;
    use AppHttpControllersProductController;
    
    /*
    |--------------------------------------------------------------------------
    | Web Routes
    |--------------------------------------------------------------------------
    |
    | Here is where you can register web routes for your application. These
    | routes are loaded by the RouteServiceProvider within a group which
    | contains the "web" middleware group. Now create something great!
    |
    */
    
    Route::get('/', function () {
        return view('welcome');
    });
    
    Route::resource('products', ProductController::class)->middleware('auth');

    Dengan menambahkan ->middleware('auth'), hanya pengguna yang sudah login yang dapat mengakses routes products. Jika pengguna belum login, mereka akan otomatis diarahkan ke halaman login.

  3. Implementasi Otorisasi: Untuk implementasi otorisasi, Anda bisa menggunakan Policies di Laravel. Policies mendefinisikan aturan otorisasi untuk model tertentu. Contoh:

    • Buat Policy untuk Model Product:

      php artisan make:policy ProductPolicy --model=Product
    • Buka app/Policies/ProductPolicy.php dan definisikan aturan otorisasi. Misalnya, hanya admin yang boleh menghapus product.

      <?php
      
      namespace AppPolicies;
      
      use AppModelsUser;
      use AppModelsProduct;
      use IlluminateAuthAccessHandlesAuthorization;
      
      class ProductPolicy
      {
          use HandlesAuthorization;
      
          /**
           * Determine whether the user can view any models.
           *
           * @param  AppModelsUser  $user
           * @return IlluminateAuthAccessResponse|bool
           */
          public function viewAny(User $user)
          {
              return true; // Semua user boleh melihat daftar produk
          }
      
          /**
           * Determine whether the user can view the model.
           *
           * @param  AppModelsUser  $user
           * @param  AppModelsProduct  $product
           * @return IlluminateAuthAccessResponse|bool
           */
          public function view(User $user, Product $product)
          {
              return true; // Semua user boleh melihat detail product
          }
      
          /**
           * Determine whether the user can create models.
           *
           * @param  AppModelsUser  $user
           * @return IlluminateAuthAccessResponse|bool
           */
          public function create(User $user)
          {
              return $user->is_admin; // Hanya admin yang boleh membuat product
          }
      
          /**
           * Determine whether the user can update the model.
           *
           * @param  AppModelsUser  $user
           * @param  AppModelsProduct  $product
           * @return IlluminateAuthAccessResponse|bool
           */
          public function update(User $user, Product $product)
          {
              return $user->is_admin; // Hanya admin yang boleh mengupdate product
          }
      
          /**
           * Determine whether the user can delete the model.
           *
           * @param  AppModelsUser  $user
           * @param  AppModelsProduct  $product
           * @return IlluminateAuthAccessResponse|bool
           */
          public function delete(User $user, Product $product)
          {
              return $user->is_admin; // Hanya admin yang boleh menghapus product
          }
      
          /**
           * Determine whether the user can restore the model.
           *
           * @param  AppModelsUser  $user
           * @param  AppModelsProduct  $product
           * @return IlluminateAuthAccessResponse|bool
           */
          public function restore(User $user, Product $product)
          {
              //
          }
      
          /**
           * Determine whether the user can permanently delete the model.
           *
           * @param  AppModelsUser  $user
           * @param  AppModelsProduct  $product
           * @return IlluminateAuthAccessResponse|bool
           */
          public function forceDelete(User $user, Product $product)
          {
              //
          }
      }

      (Pastikan Anda menambahkan is_admin field di tabel users dan di Model User)

    • Register Policy di AuthServiceProvider.

      <?php
      
      namespace AppProviders;
      
      use IlluminateFoundationSupportProvidersAuthServiceProvider as ServiceProvider;
      use IlluminateSupportFacadesGate;
      use AppModelsProduct;
      use AppPoliciesProductPolicy;
      
      class AuthServiceProvider extends ServiceProvider
      {
          /**
           * The model to policy mappings for the application.
           *
           * @var array<class-string, class-string>
           */
          protected $policies = [
              Product::class => ProductPolicy::class,
          ];
      
          /**
           * Register any authentication / authorization services.
           *
           * @return void
           */
          public function boot()
          {
              $this->registerPolicies();
      
              //
          }
      }
    • Gunakan Policy di Controller.

      <?php
      
      namespace AppHttpControllers;
      
      use AppModelsProduct;
      use AppHttpRequestsProductRequest;
      use IlluminateHttpRequest;
      use IlluminateSupportFacadesGate; // Import Gate
      
      class ProductController extends Controller
      {
          // ... (kode sebelumnya)
      
          public function destroy(Product $product)
          {
              if (Gate::denies('delete', $product)) {
                  abort(403, 'Unauthorized action.'); // Jika tidak diizinkan, tampilkan error
              }
      
              $product->delete();
      
              return redirect()->route('products.index')
                              ->with('success','Product deleted successfully');
          }
      }

Dengan langkah-langkah di atas, Anda telah mengamankan aplikasi CRUD Anda dengan otentikasi dan otorisasi.

10. Meningkatkan Performa Aplikasi CRUD Laravel 9

Setelah aplikasi CRUD Anda berjalan dengan baik, Anda dapat meningkatkan performanya dengan beberapa teknik:

  • Caching: Gunakan caching untuk menyimpan data yang sering diakses, sehingga mengurangi beban database. Laravel menyediakan berbagai fitur caching yang mudah digunakan.
  • Eager Loading: Hindari masalah N+1 query dengan menggunakan eager loading. Eager loading memungkinkan Anda untuk mengambil data relasi bersamaan dengan data utama, sehingga mengurangi jumlah query ke database.
  • Indexing Database: Pastikan kolom yang sering digunakan dalam query telah diindeks. Indeks membantu database untuk mencari data lebih cepat.
  • Optimize Queries: Tulis query yang efisien dan hindari penggunaan query yang kompleks jika tidak diperlukan.
  • Pagination: Gunakan pagination untuk memecah data menjadi halaman-halaman yang lebih kecil, sehingga mengurangi beban browser dan server.
  • Minify Assets: Minifikasi file CSS dan JavaScript untuk mengurangi ukuran file dan mempercepat waktu loading halaman.

Kesimpulan

Artikel ini telah memandu Anda langkah demi langkah dalam cara membuat CRUD dengan Laravel 9. Anda telah mempelajari cara membuat model, migrasi, controller, routes, dan views. Anda juga telah mempelajari cara memvalidasi data, mengamankan aplikasi dengan otentikasi dan otorisasi, dan meningkatkan performa aplikasi. Dengan menguasai CRUD, Anda dapat membangun aplikasi web yang dinamis dan interaktif dengan mudah menggunakan Laravel 9. Jangan ragu untuk bereksperimen dan mencoba fitur-fitur Laravel lainnya untuk mengembangkan aplikasi yang lebih kompleks dan canggih. Selamat mencoba!

Tags: CRUDDatabaseDevelopmentEloquentLaravel 9PHPProgrammingtutorialWeb Developmentwebsite
Jasper

Jasper

Related Posts

API

Membuat API Authentication dengan Laravel Sanctum: Panduan Lengkap

by Jasper
June 26, 2025
Development

Top 5 Package Laravel yang Mempermudah Pengembangan Website Anda

by Seraphina
June 26, 2025
Database

Cara Menggunakan Laravel Eloquent untuk Query Database: Panduan Lengkap

by Willow
June 25, 2025
Next Post

Laravel Package Terbaik untuk Authentication: Keamanan Aplikasi Terjamin

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Recommended

Desain Website Modern dan Menarik: Tingkatkan Konversi dengan Visual yang Memukau

April 9, 2025

Lowongan Kerja Web Development Fresh Graduate: Tips Mendapatkan Pekerjaan Impian

June 9, 2025

Tutorial Laravel Dasar untuk Pemula Bahasa Indonesia: Mulai Membangun Aplikasi Web

June 9, 2025

Tools AI Gratis untuk Meningkatkan Produktivitas Konten Marketing Anda

June 27, 2025

Cara Membuat Artikel SEO-Friendly dengan Bantuan AI

June 26, 2025

Aplikasi AI Terbaik untuk Mengedit Foto Produk Online: Tingkatkan Penjualanmu Sekarang!

June 26, 2025

Membuat API Authentication dengan Laravel Sanctum: Panduan Lengkap

June 26, 2025

m.techreview.click

Our media platform offers reliable news and insightful articles. Stay informed with our comprehensive coverage and in-depth analysis on various topics.
Read more »

Recent Posts

  • Tools AI Gratis untuk Meningkatkan Produktivitas Konten Marketing Anda
  • Cara Membuat Artikel SEO-Friendly dengan Bantuan AI
  • Aplikasi AI Terbaik untuk Mengedit Foto Produk Online: Tingkatkan Penjualanmu Sekarang!

Categories

  • 2024
  • Agency
  • AI
  • Akses
  • Aktif
  • Akuntansi
  • Algoritma
  • Analisis
  • Anggaran
  • Antarmuka
  • Antisipasi
  • API
  • Aplikasi
  • Artikel
  • Asynchronous
  • Audio
  • Authentication
  • Authorization
  • Backend
  • Background
  • Backup
  • Bahasa
  • Bandwidth
  • Bantuan
  • Belajar
  • Bergabung
  • Biaya
  • Bisnis
  • Blogger
  • Bootstrap
  • Branding
  • Bukti
  • Cepat
  • Chatbot
  • Cloud
  • Coding
  • Company
  • Contoh
  • cPanel
  • CRM
  • CSS
  • Custom
  • Dampak
  • Dasar
  • Data
  • Database
  • Deployment
  • Desain
  • Design
  • Detail
  • Developer
  • Development
  • Digital
  • Diskusi
  • Dokumentasi
  • Domain
  • Download
  • Dukungan
  • E-commerce
  • Efektif
  • Efisiensi
  • Eloquent
  • Email
  • Engine
  • Enterprise
  • Error
  • Error generating categories
  • Estimasi
  • Etika
  • Event
  • Faktor
  • Fitur
  • Fleksibel
  • Fortify
  • Foto
  • Framework
  • Freelancer
  • Fresh
  • Frontend
  • Fungsi
  • Gambar
  • Garansi
  • Gratis
  • Hacker
  • Harga
  • Hemat
  • Here are 5 categories derived from the article title "Hosting dengan Dukungan Pelanggan 24 Jam: Bantuan Kapanpun Dibutuhkan": Hosting
  • Here are 5 categories derived from the article title "Hosting Domain Murah Indonesia dengan Proteksi DDoS Gratis: Solusi Terbaik untuk Website Anda": Hosting
  • Here are 5 categories derived from the provided list and the article titles: Company
  • Hosting
  • HTML
  • Hybrid
  • Implementasi
  • Indonesia
  • Inovasi
  • Inspirasi
  • Instalasi
  • Integrasi
  • Investasi
  • Jakarta
  • Jasa
  • JavaScript
  • Kantor
  • Kapasitas
  • Karir
  • Karyawan
  • Keamanan
  • Keandalan
  • Kebutuhan
  • Kecepatan
  • Kecil
  • Kehidupan
  • Kemampuan
  • Kemudahan
  • Kerja
  • Kesalahan
  • Kesehatan
  • Keterampilan
  • Keuntungan
  • Keyword
  • Kode
  • Kompetensi
  • Komponen
  • Komunikasi
  • Komunitas
  • Konsep
  • Konten
  • Konversi
  • Kreativitas
  • Kredibilitas
  • Kualitas
  • Langkah
  • Laravel
  • Latihan
  • Layanan
  • Library
  • Listener
  • Livewire
  • Logika
  • Logo
  • Lokal
  • Loyalitas
  • Machine Learning
  • Mahasiswa
  • Mahir
  • Maintenance
  • Manfaat
  • Manufaktur
  • Marketing
  • Masa Depan
  • Masyarakat
  • Medis
  • Memilih
  • Meningkatkan
  • Middleware
  • Migration
  • Mobile
  • Modern
  • Murah
  • MySQL
  • Observer
  • Online
  • Operasional
  • Optimasi
  • ORM
  • Otentikasi
  • Otomatis
  • Package
  • Panduan
  • Pasar
  • Pekerjaan
  • Pelajaran
  • Pelanggan
  • Pelatihan
  • Peluang
  • Pemahaman
  • Pemanfaatan
  • Pemasaran
  • Pemilihan
  • Pemrograman
  • Pemula
  • Penawaran
  • Pengalaman
  • Pengenalan
  • Pengguna
  • Penggunaan
  • Pengujian
  • Penipuan
  • Penjualan
  • Penulisan
  • Peran
  • Perbandingan
  • Perbedaan
  • Performa
  • Performance
  • Peringkat
  • Pertimbangan
  • Pertumbuhan
  • Perusahaan
  • PHP
  • Pilihan
  • Platform
  • Policy
  • Portofolio
  • Praktik
  • Prediksi
  • Pribadi
  • Process
  • Produktivitas
  • Profesional
  • Profil
  • Profile
  • Project
  • Proyek
  • Python
  • Queue
  • Real-Time
  • Redis
  • Referensi
  • Rekomendasi
  • Relasi
  • Remote
  • Request
  • Responsive
  • Retail
  • Retensi
  • Review
  • Riset
  • Ritel
  • Roadmap
  • Saham
  • Sanctum
  • Sederhana
  • Seeding
  • SEO
  • Sertifikat
  • Server
  • Sharing
  • Sinkronisasi
  • Sistem
  • Skalabilitas
  • Skill
  • Software
  • Solusi
  • Space
  • SSL
  • Startup
  • Strategi
  • Struktur
  • Studi Kasus
  • Sukses
  • Tanggung Jawab
  • Tantangan
  • Teknis
  • Teknologi
  • Teks
  • Template
  • Tenaga Kerja
  • Terbaik
  • Terjangkau
  • Terjemahan
  • Terlengkap
  • Terpercaya
  • Tim
  • Tips
  • Toko
  • Tools
  • Training
  • Transkripsi
  • Tren
  • Tugas
  • Tutorial
  • Uji Coba
  • UMKM
  • Umum
  • Unlimited
  • Uptime
  • URL
  • User Experience
  • Video
  • Visual
  • VPS
  • Wajah
  • Web
  • Web Development
  • Website
  • Windows
  • WordPress

Resource

  • About us
  • Contact Us
  • Privacy Policy

© 2024 m.techreview.click.

No Result
View All Result
  • Website
  • Indonesia
  • Laravel
  • Hosting
  • AI
  • Development

© 2024 m.techreview.click.