Secara default, di QuickAdminPanel kami membuat semua model dengan fitur penghapusan sementara, dari pengalaman dengan klien yang kami tahu – lebih baik menyimpan data yang dihapus “untuk berjaga-jaga”, daripada merasa kasihan atas kecelakaan aneh. Tapi kemudian muncul pertanyaan bagaimana cara menghapus data di hubungan?
Bayangkan sebuah skenario dimana kita memiliki dua model: Proyek Dan Transaksidimana satu proyek memiliki banyak transaksi. Dan Project telah mengaktifkan penghapusan sementara.
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Project extends Model
{
use SoftDeletes;
public function projectTransactions()
{
return $this->hasMany(Transaction::class, 'project_id', 'id');
}
}
Apa jadinya jika ada yang ingin menghapus proyek yang transaksinya aktif?
Perilaku 1. Default: Catatan Induk Kosong
Apa yang saat ini terjadi dalam kode, adalah bahwa catatan anak tetap berada di database, tetapi tidak lagi mengambil catatan induk, menjadi kosong di tabel, hanya dengan menggunakan kode ini:
{{ $transaction->project->name ?? '' }}

Namun bagaimana jika Anda ingin membatasi penghapusan orang tua?
Atau, sebaliknya, melakukan penghapusan sementara (“cascade”) semua transaksi saat menghapus proyek?
Perilaku 2. Batasi untuk Menghapus Catatan Induk
Untuk membatasi proses penghapusan, Anda perlu menambahkan beberapa validasi di Controller menghancurkan() metode.
Jadi, saat ini masuk app/Http/Controllers/Admin/ProjectsController.php kami punya ini:
public function destroy(Project $project)
{
abort_if(Gate::denies('project_delete'), Response::HTTP_FORBIDDEN, '403 Forbidden');
$project->delete();
return back();
}
Jadi, kami melakukan validasi hanya untuk memeriksa akses, tapi tidak lebih dari itu.
Mari tambahkan centang apakah ada catatan anak, dan jika kita menemukan sesuatu – batasi proses penghapusan.
Ada beberapa cara untuk mencapai hal ini, tapi saya akan menyarankan yang paling mudah:
public function destroy(Project $project)
{
abort_if(Gate::denies('project_delete'), Response::HTTP_FORBIDDEN, '403 Forbidden');
if ($project->projectTransactions()->count()) {
return back()->withMessage('Cannot delete: this project has transactions');
}
$project->delete();
return back();
}
Lalu, itu dengan Pesan() bagian harus diuraikan dalam file Blade di suatu tempat – ekstrak pesan kesalahan dari sesi(‘pesan’).
Di QuickAdminPanel, secara default semua pesan ditampilkan seperti ini di Blade induk:
@if(session('message'))
<div class="col-lg-12">
<div class="alert alert-success" role="alert">{{ session('message') }}</div>
</div>
@endif
Berikut hasil visualnya:

Anda dapat menambahkan pemeriksaan sebanyak yang Anda inginkan di file Pengontrol itu, dan mengarahkan kembali dengan pesan kesalahan pada masing-masing pemeriksaan.
Perilaku 3. Cascade: Soft-Delete Children Records
Cara sebaliknya dalam menghadapi situasi ini adalah dengan menghapus catatan anak, saat menghapus catatan induk. Untuk itu, ada paket Laravel hebat yang disebut Cascade Soft Deletes.
Yang perlu kita lakukan hanyalah menginstalnya:
composer require iatstuti/laravel-cascade-soft-deletes
Dan kemudian tambahkan beberapa hal ke luar aplikasi/Proyek.php model – lihat yang dicetak tebal:
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Iatstuti\Database\Support\CascadeSoftDeletes;
class Project extends Model
{
use SoftDeletes, CascadeSoftDeletes;
protected $cascadeDeletes = ['projectTransactions'];
Dan itu dia! Setiap kali kami menghapus proyek, Transaksi dihapus secara otomatis:

Itu saja, semoga bermanfaat!
News
Berita
News Flash
Blog
Technology
Sports
Sport
Football
Tips
Finance
Berita Terkini
Berita Terbaru
Berita Kekinian
News
Berita Terkini
Olahraga
Pasang Internet Myrepublic
Jasa Import China
Jasa Import Door to Door
Gaming center adalah sebuah tempat atau fasilitas yang menyediakan berbagai perangkat dan layanan untuk bermain video game, baik di PC, konsol, maupun mesin arcade. Gaming center ini bisa dikunjungi oleh siapa saja yang ingin bermain game secara individu atau bersama teman-teman. Beberapa gaming center juga sering digunakan sebagai lokasi turnamen game atau esports.
Comments are closed, but trackbacks and pingbacks are open.