Ketika saya mencoba untuk menghapus Item, sebelum operasi penghapusan, program saya mengeksekusi kode di dalam peristiwa static::deleting di kelas Item.

Tetapi ketika saya mencoba untuk menghapus Kategori program saya hanya mengeksekusi kode di dalam static::deleting di Kelas Kategori. Mengapa? Saya ingin menjalankan static::deleting di Item Class juga.

class Category extends Model
{
    use HasFactory;

    function items() {
        return $this->hasMany(Item::class, 'category_id');
    }

    protected static function booted()
    {
        static::deleting(function ($category) {
            $category->items()->delete();
        });
    }
}

class Item extends Model
{
    use HasFactory;

    function categorys() {
        return $this->belongsTo(Category::class, 'category_id');
    }

    protected static function booted()
    {
        static::deleting(function ($item) {
            // something
        });
    }
}
0
Giovanni 12 Mei 2021, 14:49

2 jawaban

Jawaban Terbaik

Seperti yang dinyatakan oleh jawaban @ Kamis_dan, kueri pembaruan/penghapusan massal tidak memicu acara Eloquent. Jika Anda masih ingin memicunya, Anda dapat mengambil item dan menghapusnya satu per satu.

class Category extends Model
{
    use HasFactory;

    function items() {
        return $this->hasMany(Item::class, 'category_id');
    }

    protected static function booted()
    {
        static::deleting(function ($category) {
            $category->items()->get()->each->delete();
        });
    }
}
3
jrcamatog 12 Mei 2021, 12:55

Sayangnya, tampaknya Anda tidak dapat memicu acara penghapusan item melalui acara penghapusan kategori.

Dari dokumen di laravel Anda dapat melihat pesan ini tentang acara dan penghapusan massal/penghapusan fasih:

Saat mengeluarkan pembaruan massal atau permintaan penghapusan melalui Eloquent, peristiwa model yang disimpan, diperbarui, dihapus, dan dihapus tidak akan dikirim untuk model yang terpengaruh. Ini karena model tidak pernah benar-benar diambil saat melakukan pembaruan atau penghapusan massal.

Berikut ini tautan ke bagian yang relevan.

1
thursday_dan 12 Mei 2021, 12:51