Tutorial Laravel 9 #6 : Hapus Data dari Database


Fika Ridaul Maulayya
Full-Stack Web Developer, Content Creator and CO-Founder SantriKoding.com
Tutorial Laravel 9 #6 : Hapus Data dari Database

Halo teman-teman semuanya, di artikel sebelumnya kita telah belajar bagaimana cara membuat proses edit dan update data di Laravel 9. Sekarang kita lanjutkan belajar bagaimana cara membuat fitur delete data di Laravel 9.

Disini kita tidak hanya melakukan delete data yang ada di dalam database, tapi juga menghapus gambar yang terkait dengan data yang kita hapus. Dan disini kita hanya membutuhkan 1 method untuk proses delete data di Laravel 9.

Langkah 1 - Menambahkan Method Destroy

Sekarang, kita akan menambahkan method baaru yang bernama destroy di dalam controller post. Silahkan buka file app/Http/Controllers/PostController.php, kemudian ubah semua kode-nya menjadi seperti berikut ini :

<?php

namespace App\Http\Controllers;

use App\Models\Post;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;

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

        //render view with posts
        return view('posts.index', compact('posts'));
    }
    
    /**
     * create
     *
     * @return void
     */
    public function create()
    {
        return view('posts.create');
    }

    /**
     * store
     *
     * @param Request $request
     * @return void
     */
    public function store(Request $request)
    {
        //validate form
        $this->validate($request, [
            'image'     => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
            'title'     => 'required|min:5',
            'content'   => 'required|min:10'
        ]);

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

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

        //redirect to index
        return redirect()->route('posts.index')->with(['success' => 'Data Berhasil Disimpan!']);
    }
    
    /**
     * edit
     *
     * @param  mixed $post
     * @return void
     */
    public function edit(Post $post)
    {
        return view('posts.edit', compact('post'));
    }
    
    /**
     * update
     *
     * @param  mixed $request
     * @param  mixed $post
     * @return void
     */
    public function update(Request $request, Post $post)
    {
        //validate form
        $this->validate($request, [
            'image'     => 'image|mimes:jpeg,png,jpg,gif,svg|max:2048',
            'title'     => 'required|min:5',
            'content'   => 'required|min:10'
        ]);

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

            //upload new 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
            ]);
        }

        //redirect to index
        return redirect()->route('posts.index')->with(['success' => 'Data Berhasil Diubah!']);
    }
    
    /**
     * destroy
     *
     * @param  mixed $post
     * @return void
     */
    public function destroy(Post $post)
    {
        //delete image
        Storage::delete('public/posts/'. $post->image);

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

        //redirect to index
        return redirect()->route('posts.index')->with(['success' => 'Data Berhasil Dihapus!']);
    }
}

Dari perubahan kode di atas, kita menambahkan 1 method baru yang bernama destroy. Dimana di dalamnya pertama kita melakukan delete gambar dari data post yang terkait.

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

Setelah itu, kita hapus data post-nya dari database

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

Terakhir, kita arahkan ke dalam route yang bernama posts.index dengan memberikan informasi data berhasil dihapus.

//redirect to index
return redirect()->route('posts.index')->with(['success' => 'Data Berhasil Dihapus!']);

Langkah 2 - Uji Coba Delete Data

Sekarang, silahkan klik button HAPUS di salah satu data yang teman-teman miliki, maka akan menampilkan popup konfirmasi sebelum data benar-benar dihapus.

Jika kita klik OK, maka data akan berhasil dihapus dari database, beserta gaambar yang terkait dengan data post tersebut.

Sampai disini pembahasan bagaimana cara membuat proses hapus data di Laravel 9. Jika teman-teman ada kendala atau problem saat mengikuti tutorialnya, maka bisa bertanya di kolom komentar atau di group telegram SantriKoding.

SOURCE CODE : https://github.com/SantriKoding-com/CRUD-Laravel-9

Terima Kasih



Fika Ridaul Maulayya
Full-Stack Web 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