تحدثنا في مقال سابق عن SoftDelete في لارافيل وكيفية حذف البيانات بشكل نهائي وطرق إستعادتها والكثير من المميزات والتي يمكن الإطلال عليها من خلال المقال التالي
لكن ما سوف نتطرق له في هذا المقال هو كيفية عمل 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 سوف يتم تعبئتها بتاريخ الحذف.
زائر
يعطيكم ألف عافيه، مجهود يذكر فيشكر