Tutorial Laravel 10 #8 : Delete Data dari Database


Tutorial Laravel 10 #8 : Delete Data dari Database

Halo teman-teman semuanya, pada artikel kali ini kita semua akan belajar bagaimana cara melakukan proses delete data post dari database di Laravel.

Saat kita melakukan proses delete data, maka tidak hanya data yang di dalam database saja yang dihapus, selainkan gambar yang terkait data tersebut juga akan dihapus dari folder storage.

Langkah 1 - Menambahkan Method Destroy

Disini kita akan menambahkan method baru di dalam controller post, method ini nanti kita gunakan untuk menghapus data dari database melalui Model dan juga menghapus gambar dari folder storage Laravel.

Silahkan teman-teman buka file app/Http/Controllers/PostController.php, kemudian ubah semua kode-nya menjadi seperti berikut ini.

app/Http/Controllers/PostController.php

<?php

namespace App\Http\Controllers;

//import Model "Post
use App\Models\Post;

use Illuminate\Http\Request;

//return type View
use Illuminate\View\View;

//return type redirectResponse
use Illuminate\Http\RedirectResponse;

//import Facade "Storage"
use Illuminate\Support\Facades\Storage;

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

        //render view with posts
        return view('posts.index', compact('posts'));
    }

    /**
     * create
     *
     * @return View
     */
    public function create(): View
    {
        return view('posts.create');
    }
 
    /**
     * store
     *
     * @param  mixed $request
     * @return RedirectResponse
     */
    public function store(Request $request): RedirectResponse
    {
        //validate form
        $this->validate($request, [
            'image'     => 'required|image|mimes:jpeg,jpg,png|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!']);
    }
    
    /**
     * show
     *
     * @param  mixed $id
     * @return View
     */
    public function show(string $id): View
    {
        //get post by ID
        $post = Post::findOrFail($id);

        //render view with post
        return view('posts.show', compact('post'));
    }

    /**
     * edit
     *
     * @param  mixed $id
     * @return View
     */
    public function edit(string $id): View
    {
        //get post by ID
        $post = Post::findOrFail($id);

        //render view with post
        return view('posts.edit', compact('post'));
    }
        
    /**
     * update
     *
     * @param  mixed $request
     * @param  mixed $id
     * @return RedirectResponse
     */
    public function update(Request $request, $id): RedirectResponse
    {
        //validate form
        $this->validate($request, [
            'image'     => 'image|mimes:jpeg,jpg,png|max:2048',
            'title'     => 'required|min:5',
            'content'   => 'required|min:10'
        ]);

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

        //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($id): RedirectResponse
    {
        //get post by ID
        $post = Post::findOrFail($id);

        //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 method baru dengan nama destroy dan pada parameternya kita berikan $id.

public function destroy($id): RedirectResponse
{

	//...
	
}

Di dalam method tersebut, pertama-tama kita melakukan get data post berdasarkan ID yang ada di parameter atau $id.

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

Jika data ditemukan, maka kita lanjutkan melakukan delete gambar yang ada di dalam folder storage/app/public/posts.

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

Setelah gambar berhasil didelete, kita lanjutkan melakukan delete data di dalam database.

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

Jika data sudah berhasil didelete, maka kita akan redirect atau arahkan ke dalam route yang bernama posts.index dengan memberikan session flash dengan key success dan berisi value Data Berhasil Dihapus!.

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

Langkah 2 - Uji Cobaa Delete Data

Silahkan teman-teman klik button DELETE disalah satu data yang teman-teman miliki, jika berhasil maka akan menampilkan sebuah alert konfirmasi.

Silahkan klik OK, maka data akan berhasil dihapus dari database.

Sampai disini serti artikel tentang belajar Laravel 10 untuk pemula, jika teman-teman mengalami kendala atau kesulitan dalam belajar, maka bisa bergabung di group Telegram SantriKoding.

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

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