Mengedit Data

Kelihatannya pada tutorial ini saya tidak akan membahas terlalu banyak karena di tutorial sebelumnya sudah saya jelaskan. Jadi disini Anda akan melakukan pengeditan data yang akan di edit, serta melakukan pembaruan data.

Daftar isi:

Langkah 1 - Menampilkan Semua Data

Masing menggunakan model binding untuk menampilkan datanya, sekarang salin dan tempelkan skrip di bawah ini pada berkas ProductController.php. Kemudian sesuaikan dengan metode edit().

public function edit(Product $product)
{
    return view('products.edit', compact('product'));
}

Langkah 2 - Skrip Edit

Sekarang langsung saja buat berkas baru bernama edit.blade.php pada direktori ../views/products. Kemudian salin dan tempelkan skrip di bawah ini pada berkas tersebut.

@extends('layouts.default', [
    'title' => 'Edit Product'
])

@section('content')
<div class="level">
    <div class="level-left">
        <h1 class="title is-4">Edit Product</h1>
    </div>
    <div class="level-right buttons">
        <a
            href="{{ route('products.show', $product->id) }}"
            class="button is-light">
            Detail
        </a>
        <a
            href="{{ route('products.index') }}"
            class="button is-light">
            Back
        </a>
    </div>
</div>

<hr>

<form action="{{ route('products.update', $product->id) }}" method="post">
    @csrf
    @method('PUT')
    
    <div class="field">
        <label for="title" class="label">Title</label>
        <div class="control">
            <input type="text" name="title" id="title" value="{{ old('title', $product->title) }}" class="input">
        </div>
        @error('title')
            <p class="help is-danger">{{ $message }}</p>
        @enderror
    </div>
    <div class="field">
        <label for="description" class="label">Description</label>
        <div class="control">
            <textarea name="description" id="description" cols="30" rows="10" class="textarea">{{ old('description', $product->description) }}</textarea>
        </div>
        @error('description')
            <p class="help is-danger">{{ $message }}</p>
        @enderror
    </div>
    <div class="field">
        <label for="stock" class="label">Stock</label>
        <div class="control">
            <input type="number" name="stock" id="stock" value="{{ old('stock', $product->stock) }}" class="input">
        </div>
        @error('stock')
            <p class="help is-danger">{{ $message }}</p>
        @enderror
    </div>
    <div class="field">
        <button class="button is-primary">Save Change</button>
    </div>
</form>
@endsection

Hal yang paling penting saat melakukan pengeditan data Anda harus memberikan skrip di bawah ini. Kalau tidak maka saat melakukan permintaan metodenya akan post, maka dari itu Anda harus mengubah metodenya menjadi put seperti ini.

@method('PUT')

Fungsi old() sudah pernah di bawah sebelumnya, tetapi untuk parameter kedua yaitu nilai asali (default).

{{ old('stock', $product->stock) }}

Langkah 3 - Memperbarui Data Edit

Selanjutnya salin dan tempelkan skrip di bawah ini pada berkas ProductController.php kemudian sesuaikan dengan metodenya.

public function update(Request $request, Product $product)
{
    $request->validate([
        'title' => 'required|min:3',
        'description' => 'required|min:3',
        'stock' => 'required',
    ]);

    $product->update($request->all());

    return redirect()->route('products.show', $product->id);
}

Skrip di atas hampir sama dengan metode store(), tetapi bedanya disini Anda akan melakukan pembaruan data. Maka dari itu cukup melakukan skrip di bawah ini yaitu update() dari model variabel $product.

$product->update($request->all());