لارافيل, Others / 2024-09-08

Cascading Soft Deletes في إطار العمل لارافيل

Cascading Soft Deletes في إطار العمل لارافيل

2024-09-08 وقت القراءه : 2 دقائق

تحدثنا في مقال سابق عن SoftDelete في لارافيل وكيفية حذف البيانات بشكل نهائي وطرق إستعادتها والكثير من المميزات والتي يمكن الإطلال عليها من خلال المقال التالي 

ما هو SoftDelete في Laravel وكيفية إستعادة السجلات وحذفها بشكل نهائي، وكيفية إضافتها للـ route مباشرة.

لكن ما سوف نتطرق له في هذا المقال هو كيفية عمل Cascade on SoftDelete، مثلا إن كان لدي الجدول Authors وكل Author له مجموعة من Books، وكنا نستخدم خاصيه SoftDelete عند حذف الـ Author، في الحذف العادي اي دون إستخدام SoftDelete فإنه سوف يتم حذف جميع الكتب التي تتبع للكاتب الذي تم حذفه لكن في SoftDelete فإنه لا يتم حذف الكتب.

إلا إنه للقيام بحذف الكتب عند حذف الكاتب يمكن لنا الإستعانة بالحزمة 

Cascading soft deletes for the Laravel PHP Framework


لو كان لدينا الجدول Authors

public function up()
{
    Schema::create('authors', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->timestamps();
        $table->softDeletes();
    });
}

وكذلك الجدول Books 

public function up()
{
    Schema::create('books', function (Blueprint $table) {
        $table->id();
        $table->string('title');
        $table->foreignId('author_id')->constrained()->cascadeOnDelete();
        $table->softDeletes();
        $table->timestamps();
    });
}

نحتاج لتثبيت الحزمة

$ composer require dyrynda/laravel-cascade-soft-deletes

بعد تثبيت الحزمة في الـ Author Model نحتاج لتعريف الموديل المرتبط به وفي حالتنا هو جدول Books، وكذلك إضافة dates وإستخدام CascadeDeletes و CascadeSoftDeletes

class Author extends Model
{
    use HasFactory;
    use SoftDeletes, CascadeSoftDeletes;


    protected $cascadeDeletes = ['books'];
    protected $dates = ['deleted_at'];


    public function books(){
        return $this->hasMany(Book::class);
    }
}

الأن عند حذف Author فإن قيمة deleted_at في جدولي authors و books سوف يتم تعبئتها بتاريخ الحذف.


التعليقات
زائر
منذ سنة

يعطيكم ألف عافيه، مجهود يذكر فيشكر

إضافة تعليق
Loading...