Rumahweb Journal
banner - belajar laravel bagian 26

Belajar Laravel Bagian 26: Cara Hapus File Dari Database

Pada tutorial belajar Laravel bagian 25, kita telah mempelajari cara mengunggah file ke database serta menampilkan preview dari file yang berhasil diunggah. Nah, pada seri belajar Laravel bagian 26 ini, kita akan melanjutkan pembahasan dengan mempelajari cara menghapus file dari database di Laravel.

Update Controller

Silakan edit file app/Http/Controllers/FileController.php untuk menambahkan method hapus, yang akan kita beri nama dengan method destroy

<?php

namespace App\Http\Controllers;

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

class FileController extends Controller
{
    public function index()
    {
        $files = File::all();
        return view('upload', compact('files'));
    }

    public function store(Request $request)
    {
        // Validasi
        $request->validate([
            'file' => 'required|mimes:jpg,jpeg,png,pdf|max:2048'
        ]);

        // Simpan file ke storage/app/public/uploads
        $path = $request->file('file')->store('uploads', 'public');

        // Simpan ke database
        $file = new File();
        $file->name = $request->file('file')->getClientOriginalName();
        $file->path = $path;
        $file->save();

        return back()->with('success', 'File berhasil diupload!');
    }

    public function destroy($id)
    {
        $file = File::findOrFail($id);

        // Hapus file fisik di storage
        if (Storage::disk('public')->exists($file->path)) {
            Storage::disk('public')->delete($file->path);
        }

        // Hapus dari database
        $file->delete();

        return back()->with('success', 'File berhasil dihapus!');
    }
}

Update Routes

Selanjutnya edit file  routes/web.php. Tambahkan Route delete.

use App\Http\Controllers\FileController;

Route::get('/upload', [FileController::class, 'index']);
Route::post('/upload', [FileController::class, 'store']);
Route::delete('/upload/{id}', [FileController::class, 'destroy'])->name('upload.destroy');

Update View

Selanjutnya edit untuk tampilan pada file resources/views/upload.blade.php.  Untuk menambahkan tombol Hapus di dalam tabel:

<!DOCTYPE html>
<html>
<head>
    <title>Upload File Laravel ke Database</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-5">
    <h2 class="mb-4">Upload File ke Database</h2>

    {{-- Pesan sukses --}}
    @if(session('success'))
        <div class="alert alert-success">{{ session('success') }}</div>
    @endif

    {{-- Error --}}
    @if($errors->any())
        <div class="alert alert-danger">
            <ul class="mb-0">
                @foreach ($errors->all() as $err)
                    <li>{{ $err }}</li>
                @endforeach
            </ul>
        </div>
    @endif

    <!-- Form Upload -->
    <div class="card shadow mb-4">
        <div class="card-body">
            <form action="/upload" method="POST" enctype="multipart/form-data">
                @csrf
                <div class="mb-3">
                    <label class="form-label">Pilih File</label>
                    <input type="file" name="file" class="form-control">
                </div>
                <button type="submit" class="btn btn-primary">Upload</button>
            </form>
        </div>
    </div>

    <!-- List File -->
    <h4>Daftar File</h4>
    <table class="table table-bordered align-middle">
        <thead class="table-dark">
            <tr>
                <th>No</th>
                <th>Nama File</th>
                <th>Preview</th>
                <th>Aksi</th>
            </tr>
        </thead>
        <tbody>
            @forelse($files as $index => $f)
                <tr>
                    <td>{{ $index+1 }}</td>
                    <td>{{ $f->name }}</td>
                    <td>
                        @php $ext = pathinfo($f->path, PATHINFO_EXTENSION); @endphp
                        @if(in_array($ext, ['jpg','jpeg','png']))
                            <img src="{{ asset('storage/'.$f->path) }}" class="img-thumbnail" style="max-width:100px;">
                        @elseif($ext == 'pdf')
                            <a href="{{ asset('storage/'.$f->path) }}" target="_blank" class="btn btn-danger btn-sm">Lihat PDF</a>
                        @else
                            <a href="{{ asset('storage/'.$f->path) }}" target="_blank" class="btn btn-secondary btn-sm">Download</a>
                        @endif
                    </td>
                    <td>
                        <form action="{{ route('upload.destroy', $f->id) }}" method="POST" onsubmit="return confirm('Yakin hapus file ini?')">
                            @csrf
                            @method('DELETE')
                            <button type="submit" class="btn btn-danger btn-sm">Hapus</button>
                        </form>
                    </td>
                </tr>
            @empty
                <tr>
                    <td colspan="4" class="text-center">Belum ada file</td>
                </tr>
            @endforelse
        </tbody>
    </table>
</div>

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

Storage Link

Terakhir memastikan symbolic link sudah dibuat. Jalankan perintah berikut

php artisan storage:link

Lakukan Testing

Silakan akses http:127.0.0.1/upload kemudian upload file (jpg/png/pdf). File yang diupload tersebut akan disimpan di folder storage dan akan masuk ke dalam path database.

Pindah Hosting ke Rumahweb Gratis

testing hapus file laravel

Lakukan hapus file dengan tekan tombol Hapus. Saat tombol ini di klik, akan tampil popup yang mengkonfirmasi apakah Anda benar ingin menghapus file tersebut? 

popup validasi

Saat Anda klik Oke, maka file akan dihapus, dan informasi path di database juga akan dihapus. 

belajar laravel hapus file

Penutup

Sekarang, Anda telah mempelajari cara menghapus file dari database menggunakan Laravel. Dengan langkah ini, fitur upload file pada aplikasi Laravel Anda menjadi lebih lengkap karena sudah dilengkapi dengan fungsi untuk menghapus file yang tidak lagi dibutuhkan.

Demikian tutorial belajar Laravel bagian 26 tentang cara menghapus file dalam database di Laravel. Ikuti terus seri belajar Laravel selanjutnya dari Rumahweb Indonesia, agar kemampuan Laravel Anda semakin meningkat. Semoga bermanfaat.

Bermanfaatkah Artikel Ini?

Klik bintang 5 untuk rating!

Rating rata-rata 0 / 5. Vote count: 0

Belum ada vote hingga saat ini!

Kami mohon maaf artikel ini kurang berguna untuk Anda!

Mari kita perbaiki artikel ini!

Beri tahu kami bagaimana kami dapat meningkatkan artikel ini?

Anggit TS

I'm a Technical Support Specialist at Rumahweb Indonesia with a strong passion for front-end development. Skilled in website creation and experienced in content writing. I blend technical expertise with creativity to craft engaging and functional web experiences!

banner pop up - Pindah Hosting ke Rumahweb