Tutorial Restful API Laravel 11 #7 : Update Data ke Dalam Database


Tutorial Restful API Laravel 11 #7 : Update Data ke Dalam Database

Halo teman-teman semuanya, pada artikel kali ini kita semua akan belajar bagaimana cara membuat proses update data menggunakan Rest API di Laravel 11.

Di dalam proses update ini, kita akan membuat sebuah kondisi untuk memeriksa request gambar. Jika gambar diubah, maka kita akan melakukan upload gambar baru dan menghapus gambar lama dari server.

Langkah 1 - Menambahkan Method Update

Sekarang, silahkan teman-teman buka file controller PostController yang berada di dalam folder app/Http/Controllers/Api/PostController.php, kemudian ubah semua kode-nya menjadi seperti berikut ini.

app/Http/Controllers/Api/PostController.php

<?php

namespace App\Http\Controllers\Api;

//import model Post
use App\Models\Post;

use Illuminate\Http\Request;

//import resource PostResource
use App\Http\Controllers\Controller;

//import Http request
use App\Http\Resources\PostResource;

//import facade Validator
use Illuminate\Support\Facades\Validator;

//import facade Storage
use Illuminate\Support\Facades\Storage;

class PostController extends Controller
{
    /**
     * index
     *
     * @return void
     */
    public function index()
    {
        //get all 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 $id
     * @return void
     */
    public function show($id)
    {
        //find post by ID
        $post = Post::find($id);

        //return single post as a resource
        return new PostResource(true, 'Detail Data Post!', $post);
    }

    /**
     * update
     *
     * @param  mixed $request
     * @param  mixed $id
     * @return void
     */
    public function update(Request $request, $id)
    {
        //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);
        }

        //find post by ID
        $post = Post::find($id);

        //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/' . basename($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 dulu Facades Storage dari Laravel. Ini akan kita gunakan salah satunya untuk menghapus file gambar dari server.

//import facade Storage
use Illuminate\Support\Facades\Storage;

Kemudian di dalam class PostController kita menambahkan method baru dengan nama upddate, di dalam method tersebut kita menerima 2 parameter, yaitu $request dan $id.

Parameter $request akan berisi data yang dikirimkan oleh pengguna, seperti data gambar, title ataupun content. Sedangkan untuk parameter $id akan berisi ID dari data post yang akan diupdate.

public function update(Request $request, $id)
{

	//...
	
}

Di dalam method tersebut, hal pertama yang kita lakukan adalah membuat validasi request yang masuk.

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

Dari kode validasi di atas, berikut ini penjelasan lengkapnya.

KEY VALIDATION DESCRIPTION
title required field title wajib diisi.
content required field content wajib diisi.

Kenapa image kita tidak berikan validasi, karena gambar akan bersifat opsional (bisa diisi atau dikosongkan).

Jika request yang masuk tidak sesuai dengan validasi di atas, maka kita akan melakukan return ke dalam format JSON dengan memberikan informasi error validasi.

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

Setelah itu, kita melakukan get data post dari database melalui Model Post dengan method find dan berdasarkan parameter $id.

//find post by ID
$post = Post::find($id);

Kemudian kita membuat kondisi untuk mengecek adanya request file yang bernama image.

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

	//upload gambar baru
	
	//hapus gambar lama
	
	//update post dengan gambar baru
	
} else {

	//update post tanpa gambar

}

Di atas, jika ada sebuah request image, maka artinya kita akan melakukan perubahan gambar, hal pertama yang dilakukan adalah melakukan upload gambar baru.

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

Kemudian menghapus gambar lama menggunakan Facades Storage.

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

Dan melakukan update data post dengan gambar yang baru.

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

Sedangkan jika request image kosong atau null, maka kita hanya mengupdate data post tanpa gambar.

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

kemudian hasilnya kita return menggunakan PostResource agar diformat menjadi JSON.

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

Langkah 2 - Uji Coba Rest API

Silahkan teman-teman buka aplikasi Postman, kemudian masukkan URL berikut ini http://localhost:8000/api/posts/1 dan untuk method-nya silahkan pilih POST.

di atas, kita berikan contoh melakukan update dengan ID 1.

Kemudian pilih tab Body dan pilih form-data, dan masukkan key dan value berikut ini.

KEY TYPE VALUE
image file Pilih gambar dari komputer (opsional)
title text Belajar Rest API Laravel 11 - Edit
content text Belajar Rest API Laravel 11 - Edit
_method text PUT

Di atas, kita menambahkan key _method dengan value PUT yang menandakan ini adalah proses update data.

Jika sudah, silahkan teman-teman klik Send dan jika berhasil maka akan mendapatkan hasil seperti berikut ini.

{
    "success": true,
    "message": "Data Post Berhasil Diubah!",
    "data": {
        "id": 1,
        "image": "http://localhost:8000/storage/posts/NuJYSsdyeNRPoiOPkN4VXhvtDSnYSvsyjTodiYNt.png",
        "title": "Belajar Rest API Laravel 11 - Edit",
        "content": "Belajar Rest API Laravel 11 - Edit",
        "created_at": "2024-02-10T05:59:53.000000Z",
        "updated_at": "2024-02-12T06:01:14.000000Z"
    }
}

kesimpulan

Pada artikel ini kita telah belajar bagaimana cara melakukan proses update data di Laravel 11 dengan Rest API dan membuat pengkondisian untuk upload gambar.

Pada artikel berikutnya, kita semua akan belajar bersama-sama bagaimana cara melakukan proses delete data di Laravel 11 menggunakan Rest API.

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