Tutorial Restful API di Laravel 9 #6 : Update Data ke Database


Tutorial Restful API di Laravel 9 #6 : Update Data ke Database

Halo teman-teman semuanya, pada kesempatan kali ini kita semua akan belajar bagaimana cara melakukan proses update data menggunakan Rest API di dalam Laravel.

Disini kita juga akan membuat sebuah kondisi untuk upload gambar yang bersifat opsional. Yaitu jika ada sebuah request gambar baru, maka gambar yang lama akan kita hapus dari server dan kita gantikan dengan gambar yang baru.

Langkah 1 - Menambahkan Method Update

Sekarang kita akan menambahkan method untuk proses update data ke dalam database di dalam controller PostController. Silahkan buka file app/Http/Controllers/Api/PostController.php, kemudian ubah semua kode-nya menjadi seperti berikut ini :

<?php

namespace App\Http\Controllers\Api;

use App\Models\Post;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Resources\PostResource;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;

class PostController extends Controller
{    
    /**
     * index
     *
     * @return void
     */
    public function index()
    {
        //get posts
        $posts = Post::latest()->paginate(5);

        //return collection of posts as a resource
        return new PostResource(true, 'List Data Posts', $posts);
    }
    
    /**
     * store
     *
     * @param  mixed $request
     * @return void
     */
    public function store(Request $request)
    {
        //define validation rules
        $validator = Validator::make($request->all(), [
            'image'     => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
            'title'     => 'required',
            'content'   => 'required',
        ]);

        //check if validation fails
        if ($validator->fails()) {
            return response()->json($validator->errors(), 422);
        }

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

        //create post
        $post = Post::create([
            'image'     => $image->hashName(),
            'title'     => $request->title,
            'content'   => $request->content,
        ]);

        //return response
        return new PostResource(true, 'Data Post Berhasil Ditambahkan!', $post);
    }
        
    /**
     * show
     *
     * @param  mixed $post
     * @return void
     */
    public function show(Post $post)
    {
        //return single post as a resource
        return new PostResource(true, 'Data Post Ditemukan!', $post);
    }
    
    /**
     * update
     *
     * @param  mixed $request
     * @param  mixed $post
     * @return void
     */
    public function update(Request $request, Post $post)
    {
        //define validation rules
        $validator = Validator::make($request->all(), [
            'title'     => 'required',
            'content'   => 'required',
        ]);

        //check if validation fails
        if ($validator->fails()) {
            return response()->json($validator->errors(), 422);
        }

        //check if image is not empty
        if ($request->hasFile('image')) {

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

            //delete old image
            Storage::delete('public/posts/'.$post->image);

            //update post with new image
            $post->update([
                'image'     => $image->hashName(),
                'title'     => $request->title,
                'content'   => $request->content,
            ]);

        } else {

            //update post without image
            $post->update([
                'title'     => $request->title,
                'content'   => $request->content,
            ]);
        }

        //return response
        return new PostResource(true, 'Data Post Berhasil Diubah!', $post);
    }
}

Dari perubahan kode di atas, pertama kita import Facades Storage dari Laravel. Facades ini banyak fungsinya, salah satunya akan kita gunakan untuk menghapus gambar dari server.

use Illuminate\Support\Facades\Storage;

Kemudian, kita menambahkan method baru dengan nama update. DImana di dalamnya kita membuat sebuah validasi untuk pengecekan data yang dikirim.

//define validation rules
$validator = Validator::make($request->all(), [
    'title'     => 'required',
    'content'   => 'required',
]);

Untuk penjelassan validasi di atas sama seperti yang ada di dalam method store.

Jika data yang dikirimkan oleh request belum sesuai, maka kita akan lakukan return menggunakan JSON dengan status code 422 dan memberikan informasi error validasi.

//check if validation fails
if ($validator->fails()) {
  return response()->json($validator->errors(), 422);
}

Tapi, jika data yang dikirimkan sudah sesuai, maka selanjutnya kita melakukan pengecekan untuk request file gambar. Jika ada sebuah requets gambar baru, maka kita akan melakukan upload gambar tersebut dan menghapus gambar yang lama dari server.

//check if image is not empty
if ($request->hasFile('image')) {

	//upload gambar baru
	
	//hapus gambar lama
	
	//update data dengan gambar baru

} elese {
	
	//update data tanpa gambar

}

Jika proses update berhasil dilakukan, maka kita akan return menggunakan PostResource dengan memberikan beberapa parameter.

return new PostResource(true, 'Data Post Berhasil Diubah!', $post);

Langkah 2 - Uji Coba Rest API

Sekarang kita akan lakukan proses uji coba update data post. Silahkan buka aplikasi Postman, kemudian masukkan URL berikut ini http://localhost:8000/api/posts/1 dan untuk method-nya silahkan pilih POST.

INFORMASI : di atas, kita uji coba dengan data yang memiliki ID 1.

Kemudian, silahkan klik tab Body, kemudian pilih form-data dan masukkan key dan value berikut ini :

KEY TYPE VALUE
image file Silahkan pilih gambar dari komputer (Tidak Wajib Diisi).
title text Silahkan disesuaikan sendiri.
content text Silahkan disesuaikan sendiri.
_method text PUT

Jika sudah, silahkan klik Send dan jika berhasil maka akan menampilkan data dengan format JSON yang berisi informasi update post berhasil dilakukan.

{
    "success": true,
    "message": "Data Post Berhasil Diubah!",
    "data": {
        "id": 1,
        "image": "l8vWIZeqKBKKKK5SUz6F2IphIxmFZlKYgfHIzysk.png",
        "title": "Belajar Rest API di Laravel 9 - Test Update",
        "content": "Belajar Rest API di Laravel 9",
        "created_at": "2022-02-12T03:32:49.000000Z",
        "updated_at": "2022-02-12T11:29:52.000000Z"
    }
}

Sampai disini pembahasan bagaimana cara melakukan update data menggunakan Rest API di dalam Laravel. Di artikel berikutnya kita bersama-sama akan belajar bagaimana cara melakukan hapus data dari database menggunakan Rest API di Laravel.

Terima Kasih



Fika Ridaul Maulayya
Full-Stack Developer, Content Creator and CO-Founder SantriKoding.com

Suka dengan tulisan di SantriKoding? Kamu bisa memberikan dukungan dengan berdonasi atau bagikan konten ini di sosial media. Terima kasih atas dukungan Anda!

KEBIJAKAN KOMENTAR

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