Tutorial Restful API di Laravel 9 #7 : Delete Data dari Database


Tutorial Restful API di Laravel 9 #7 : Delete Data dari Database

Halo teman-teman semuanya, pada kesempatan kali ini kita semua akan belajar bagaiaman cara membuat Rest API untuk kebutuhan delete data dari database, kita juga akan menghapus gambar dari server, terkait dengan data yang dihapus tersebut.

Langkah 1 - Menambahkan Method Destroy

Sekarang kita akan menambahkan 1 method baru 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(), [
            'image'     => '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);
        }

        //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);
    }
    
    /**
     * destroy
     *
     * @param  mixed $post
     * @return void
     */
    public function destroy(Post $post)
    {
        //delete image
        Storage::delete('public/posts/'.$post->image);

        //delete post
        $post->delete();

        //return response
        return new PostResource(true, 'Data Post Berhasil Dihapus!', null);
    }
}

Dari penambahan kode di atas, kita menambahkan 1 method baru dengan nama destroy. Dimana di dalam method tersebut pertama kita melakukan hapus gambar dari server terkait data yang akan kita hapus.

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

Setelah gambar berhasil dihapus, sekarang kita lanjutkan untuk menghapus data post-nya.

//delete post
$post->delete();

Kemudian kita return menggunakan PostResource dengan memberikan beberapa parameter.

return new PostResource(true, 'Data Post Berhasil Dihapus!', null);

Langkah 2 - Uji Coba Rest API

Sekarang kita akan melakukan proses uji coba Rest API delete. Silahkan buka aplikasi Postman, kemudian masukkan URL berikut ini http://localhost:8000/api/posts/1 dan untuk method-nya silahkan pilih DELETE.

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

Jika sudah, silahkan klik Send dan jika berhasil maka akan menampilkan informasi dalam bentuk JSON yang berisi data berhaasil dihapus.

{
    "success": true,
    "message": "Data Post Berhasil Dihapus!",
    "data": null
}

Sampai disini pembahasan bagaimana cara melakukan proses hapus data menggunakan Rest API di Laravel. Jika teman-teman ada problem saat mengikuti materi, silahkan bisa bertanya melalui kolom komentar atau di group telegram SantriKoding.

SOURCE CODE : https://github.com/SantriKoding-com/Laravel-9-Restful-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