Assalamu alaikum Wr. Wb
Salam Pinter Bareng Komputer, ...zero bit...
Dalam tutorial kali ini kita akan membahas 3 hal yaitu :
- Hapus Data Produk versi Temporary (Soft Deletes)
- Restore Data Produk
- Hapus Data Produk versi Permanent.
Selalu saya ingatkan bahwa proses mempasifkan maupun menghapus data dari database harus dilakukan secara hati - hati karena DBMS seperti MySQL tidak memiliki menu UNDO, sehingga jika data sudah terlanjur dihapus permanent maka tidak akan dapat dikembalikan lagi.
Oleh karena itu, Laravel memberikan konsep SOFTDELETE yang telah kita bahas librarynya di awal yaitu saat membahas pembuatan Model dan Tabel (silakan baca lagi DI SINI). Library SoftDeletes WAJIB ditambahkan dan dipanggil terlebih dahulu untuk dapat menggunakan konsep penghapusan temporary.
Langkah - langkah untuk mempasifkan, merestore dan menghapus permanent data produk adalah sebagai berikut :
- Buka projek Laravel dengan VSCode.
- Buka file index.blade.php yang berada di dalam subfolder produk.
- Tambahkan script berikut ini :
- Selanjutnya buka file ProdukController.php dan lakukan editing script di dalam function Destroy seperti di bawah ini :
- Buka file routes web.php kemudian tambahkan routes seperti di bawah ini:
- Saat dijalankan di browser untuk setiap proses PRD (Pasif - Restore - Delete) maka akan tampil seperti berikut :
Tampilan data saat akan dipasifkan (tombol pasif diklik) - Untuk proses restore dan delete permanent tampilan nya tidak jauh berbeda.
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>
Data Produk
</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css" integrity="sha512-5A8nwdMOWrSz20fDsjczgUidUBR8liPYU+WymTZP1lmY9G6Oc7HlZv156XqnsgNUzTyMefFTcsFH/tnJE/+xBg==" crossorigin="anonymous" referrerpolicy="no-referrer" />
</head> <body> <div class="container"> <div class="row"> <div class="col"> <a href="{{url('produk/create')}}" class="btn btn-sm btn-primary mt-4 mb-2"> <i class="fa fa-plus" aria-hidden="true"></i> Tambah Data Produk Baru </a> <div class="card"> <div class="card-header text-white bg-primary">
Data Produk Aktif
</div> <div class="card-body"> <table class="table table-sm table-bordered table-condensed table-striped"> <thead> <tr> <th style="width: 10%;">Aksi</th> <th>#</th> <th>Nama Produk</th> <th style="width: 50%;">Deskripsi</th> <th style="text-align: right;">Harga</th> </tr> </thead> <tbody>
@foreach ($dtprodukaktif as $da)
<tr> <td> <a href="{{ url('/produk') }}/{{ $da->id }}/edit" class="btn btn-sm btn-success" title="Edit"> <i class="fa fa-pencil" aria-hidden="true"></i> </a>
<button class="btn btn-sm btn-warning" title="Pasifkan" onclick="openPRD('{{ $da->id }}','pasif')"> <i class="fa fa-ban" aria-hidden="true"></i> </button>
</td> <td>{{ $da->id }}</td> <td style="font-size: 10pt;"> {{ $da->namaproduk }} </td> <td style="font-size: 10pt;">{{ $da->deskripsi }}</td> <td style="text-align: right; font-size: 10pt;"> Rp. {{ number_format($da->harga, 0, ',', '.') }} </td> </tr>
<form id="pasifForm{{ $da->id }}" method="post" action="{{ url('/produk') }}"> @csrf @method('delete') <input type="hidden" name="id" value="{{ $da->id }}" /> <input type="hidden" name="aksi" value="pasif" /> </form>
@endforeach
</tbody> </table> </div> </div> </div> </div> <div class="row"> <div class="col"> <div class="card mt-4"> <div class="card-header text-white bg-danger">
Data Produk Pasif
</div> <div class="card-body"> <table class="table table-sm table-bordered table-condensed table-striped"> <thead> <tr> <th style="width: 10%;">Aksi</th> <th style="text-align: right;">#</th> <th>Nama Produk</th> <th style="width: 50%;">Deskripsi</th> <th style="text-align: right;">Harga</th> </tr> </thead> <tbody>
@foreach ($dtprodukpasif as $da)
<tr> <td>
<button class="btn btn-sm btn-warning" title="Restore" onclick="openPRD('{{ $da->id }}','restore')"> <i class="fa fa-undo" aria-hidden="true"></i> </button> <button class="btn btn-sm btn-danger" title="Delete" onclick="openPRD('{{ $da->id }}','delete')"> <i class="fa fa-trash" aria-hidden="true"></i> </button>
</td> <th style="text-align: right; font-size: 10pt;"> {{ $da->id }} </th> <td style="font-size: 10pt;"> {{ $da->namaproduk }} </td> <td style="font-size: 10pt;">{{ $da->deskripsi }}</td> <td style="text-align: right; font-size: 10pt;"> Rp. {{ number_format($da->harga, 0, ',', '.') }} </td> </tr>
<form id="restoreForm{{ $da->id }}" method="post" action="{{ url('/produk') }}"> @csrf @method('delete') <input type="hidden" name="id" value="{{ $da->id }}" /> <input type="hidden" name="aksi" value="restore" /> </form> <form id="deleteForm{{ $da->id }}" method="post" action="{{ url('/produk') }}"> @csrf @method('delete') <input type="hidden" name="id" value="{{ $da->id }}" /> <input type="hidden" name="aksi" value="delete" /> </form>
@endforeach
</tbody> </table> </div> </div> </div> </div> </div> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<script>
@if(session()->has('pesansukses')) var msg = @json(session()->pull('pesansukses')); Swal.fire({ title: "Konfirmasi", text: msg, icon: "success" }); @endif @if(session()->has('pesansalah')) var msg = @json(session()->pull('pesansalah')); Swal.fire({ title: "Konfirmasi", text: msg, icon: "success" }); @endif function openPRD(id, aksi) { Swal.fire({ title: aksi.toUpperCase(), text: "Apakah Proses ini ingin dilanjutkan?", icon: "question", showCancelButton: true, confirmButtonColor: "#3085d6", cancelButtonColor: "#d33", confirmButtonText: "Ya", cancelButtonText: "No", }).then((result) => { if (result.isConfirmed) { switch (aksi) { case 'pasif': document.getElementById('pasifForm' + id).submit(); break; case 'restore': document.getElementById('restoreForm' + id).submit(); break; case 'delete': document.getElementById('deleteForm' + id).submit(); break; } } }); }
</script> </body> </html>
//function utk menghapus data produk sesuai id
public function destroy(Request $request){
DB::beginTransaction(); try { $id = $request->id; if($request->aksi == 'pasif') { Produk::where('id','=',$id)->delete(); DB::commit(); return redirect('produk')->with('pesansukses', 'Data Sukses Dipasifkan'); } elseif($request->aksi == 'restore') { Produk::onlyTrashed()->where('id','=',$id)->restore(); DB::commit(); return redirect('produk')->with('pesansukses', 'Data Sukses Direstore'); } elseif($request->aksi == 'delete') { Produk::where('id','=',$id)->forceDelete(); DB::commit(); return redirect('produk')->with('pesansukses', 'Data Sukses Dihapus'); } } catch(\Exception $e) { DB::rollback(); return redirect()->back()->withInput()->with('pesansalah', 'Data Gagal Dihapus'); }
}
Route::get('/produk', [ProdukController::class, 'index']); Route::get('/produk/create', [ProdukController::class, 'create']); Route::post('/produk', [ProdukController::class, 'store']); Route::get('/produk/{id}/edit', [ProdukController::class, 'edit']); Route::put('/produk/{id}', [ProdukController::class, 'update']);
Route::delete('/produk', [ProdukController::class, 'destroy']);
Semoga artikel ini bermanfaat
0 comments:
Posting Komentar