Tutorial CRUD Laravel 8 Dengan Bootstrap #5 : Edit dan Update Data ke Database


Fika Ridaul Maulayya
I'm a Full-Stack Web Developer, Content Creator and CO-Founder Santri Koding. I share everything i know with Articles, Screencasts and E-Books at SantriKoding.com

Halo teman-teman semuanya, di artikel sebelumnya kita sudah banyak belajar bagaimana cara melakukan insert data ke dalam database menggunakan Laravel 8 dan Bootstrap. Dan sekarang kita akan melanjutkan belajarnya untuk proses edit dan update data ke dalam database. Disini kita akan menambahkan 2 function/method baru di dalam controller Blog untuk proses edit dan update data. Oke langsung saja kita mulai.

Langkah 1 - Membuat Function Edit dan Update

Sekarang kita akan menambahkan 2 function baru di dalam controller blog, ini akan kita manfaatkan untuk proses menampilkan data yang akan di edit dan melakukan update data ke dalam database. Silahkan buka file app/Http/Controllers/BlogController.php dan kemudian silahkan tambahkan function di bawah ini tepat di bawah function store.

/**
* edit
*
* @param  mixed $blog
* @return void
*/
public function edit(Blog $blog)
{
    return view('blog.edit', compact('blog'));
}


/**
* update
*
* @param  mixed $request
* @param  mixed $blog
* @return void
*/
public function update(Request $request, Blog $blog)
{
    $this->validate($request, [
        'title'     => 'required',
        'content'   => 'required'
    ]);

    //get data Blog by ID
    $blog = Blog::findOrFail($blog->id);

    if($request->file('image') == "") {

        $blog->update([
            'title'     => $request->title,
            'content'   => $request->content
        ]);

    } else {

        //hapus old image
        Storage::disk('local')->delete('public/blogs/'.$blog->image);

        //upload new image
        $image = $request->file('image');
        $image->storeAs('public/blogs', $image->hashName());

        $blog->update([
            'image'     => $image->hashName(),
            'title'     => $request->title,
            'content'   => $request->content
        ]);

    }

    if($blog){
        //redirect dengan pesan sukses
        return redirect()->route('blog.index')->with(['success' => 'Data Berhasil Diupdate!']);
    }else{
        //redirect dengan pesan error
        return redirect()->route('blog.index')->with(['error' => 'Data Gagal Diupdate!']);
    }
}

Di atas kita membuat 2 function untuk proses edit dan update data, yaitu :

  • edit
  • update

function edit

Function edit digunakan untuk menampilkan data yang akan di edit ke dalam sebuah form, jika teman-teman perhatikan di dalam function ini kita memiliki sebuah parameter, yaitu Blog $blog, yang artinya parameter tersebut adalah model Blog yang diambil datanya sesuai dengan ID yang di dapatkan dari URL.

Setelah data tersebut di dapatkan, maka akan di parsing ke dalam view edit.blade.php di dalam folder blog dengan menggunakan helper compact.

return view('blog.edit', compact('blog'));

Nah sekarang kita sudah bisa memanggil data blog berdasarkan ID yang diambil dari URL di dalam template edit. Untuk contoh memanggilnya kita bisa menggunakan sintaks seperti ini :

{{ $blog->title }}

function update

Function update akan kita manfaatkan untuk melakukan update data blog ke dalam database, sebelum itu disini kita juga menambahkan sebuah validasi, dimana jika validasi tersebut terpenuhi, maka data baru akan bisa di update ke dalam database sesuai dengan ID dari data blog tersebut.

Untuk proses update data blog sendiri kita menggunakan sebuah kondisi, dimna jika tidak ada request file dengan nama image, maka kita hanya akan melakukan update tanpa meng-update filed image.

$blog->update([
    'title' => $request->title,
    'content' => $request->content
]);

Dan apabila request file dengan nama image tersedia, artinya disini kita akan melakuakn update data image. Pertama kita akan remove gambar yang lama terlebih dahulu.

//hapus old image
Storage::disk('local')->delete('public/blogs/'.$blog->image);

Setelah gambar yang lama terhapus, sekarang kita lakukan upload image baru

//upload new image
$image = $request->file('image');
$image->storeAs('public/blogs', $image->hashName());

Dan kemudian data diupdate ke dalam database dengan filed nama image yang baru :

$blog->update([
    'image' => $image->hashName(), // <— new name file image
    'title' => $request->title,
    'content' => $request->content
]);

Langkah 2 - Membuat View Edit

Sekarang kita lanjutkan untuk membuat view untuk menampilkan data yang ingin kita edit dan update. Silahkan buat file baru dengan nama edit.blade.php di dalam folder resources/views/blog/ dan kemudian silahkan masukkan kode berikut ini :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Edit Data Blog - SantriKoding.com</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body style="background: lightgray">

    <div class="container mt-5 mb-5">
        <div class="row">
            <div class="col-md-12">
                <div class="card border-0 shadow rounded">
                    <div class="card-body">
                        <form action="{{ route('blog.update', $blog->id) }}" method="POST" enctype="multipart/form-data">
                            @csrf
                            @method('PUT')

                            <div class="form-group">
                                <label class="font-weight-bold">GAMBAR</label>
                                <input type="file" class="form-control" name="image">
                            </div>

                            <div class="form-group">
                                <label class="font-weight-bold">JUDUL</label>
                                <input type="text" class="form-control @error('title') is-invalid @enderror" name="title" value="{{ old('title', $blog->title) }}" placeholder="Masukkan Judul Blog">
                            
                                <!-- error message untuk title -->
                                @error('title')
                                    <div class="alert alert-danger mt-2">
                                        {{ $message }}
                                    </div>
                                @enderror
                            </div>

                            <div class="form-group">
                                <label class="font-weight-bold">KONTEN</label>
                                <textarea class="form-control @error('content') is-invalid @enderror" name="content" rows="5" placeholder="Masukkan Konten Blog">{{ old('content', $blog->content) }}</textarea>
                            
                                <!-- error message untuk content -->
                                @error('content')
                                    <div class="alert alert-danger mt-2">
                                        {{ $message }}
                                    </div>
                                @enderror
                            </div>

                            <button type="submit" class="btn btn-md btn-primary">UPDATE</button>
                            <button type="reset" class="btn btn-md btn-warning">RESET</button>

                        </form> 
                    </div>
                </div>
            </div>
        </div>
    </div>
    
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
<script src="https://cdn.ckeditor.com/4.13.1/standard/ckeditor.js"></script>
<script>
    CKEDITOR.replace( 'content' );
</script>
</body>
</html>

Untuk action dari form kita akan arahkan ke sebuah route blog.update, dengan parameter ID dari data blog, yaitu :

<form action="{{ route('blog.update', $blog->id) }}" method="POST" enctype="multipart/form-data">

kemudian jangan lupa, jika kita membuat sebuah edit data, pastikan telah menambahkan method PUT di dalam form, kurang lebih seperti berikut ini :

@method('PUT')

Dan untuk menampilkan data di dalam form, kita menggunakan helper old, kurang lebih contohnya seperti berikut ini :

<input type="text" class="form-control @error('title') is-invalid @enderror" name="title" value="{{ old('title', $blog->title) }}" placeholder="Masukkan Judul Blog">

Langkah 3 - Menjalankan Project

Sekarang kita bisa mencoba menjalankan projectnya, dengan cara klik tombol edit di dalam table data, dan jika berhasil kurang lebih seperti berikut ini :


Dan kita coba edit datanya dan kita klik UPDATE, maka jika berhasil kurang lebih tampilannya akan seperti berikut ini :


Di artikel selanjutnya kita semua akan belajar bagaimana cara membuat delete data di dalam Laravel 8. Terima Kasih


Fika Ridaul Maulayya
I'm a Full-Stack Web Developer, Content Creator and CO-Founder Santri Koding. I share everything i know with Articles, Screencasts and E-Books at SantriKoding.com
KEBIJAKAN KOMENTAR

Saat memberikan komenatar silahkan memberikan informasi lengkap tentang error, seperti: screenshot, link kode, dll. Baca aturan komentar kami

KOMENTAR