انتقل إلى محتوى الدرس
الدرس 37
دورة إطار العمل Laravel

حذف النماذج وتطبيق الحذف الناعم Soft Deletes في LaravelDeleting Eloquent Models and Soft Deletes in Laravel

حذف السجلات وتفعيل سمة الحذف الناعم SoftDeletes لاستعلام البيانات المؤرشفة واستعادتها بـ restore أو حذفها نهائياً.
أقسام الدرس
6
الأمثلة
6
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

يتيح لك Eloquent حذف نسخة نموذج محملة في الذاكرة عبر استدعاء دالة delete مباشرة أو حذف عدة سجلات بمعرفاتها الأساسية باستخدام الدالة الساكنة destroy. بينما تتطلب دالة delete جلب السجل أولاً، تقبل دالة destroy معرفاً مفرداً أو مصفوفة معرفات وتنفذ أحداث الحذف لكل سجل مطابق.

  • دالة الحذف المباشر (delete): تزيل نسخة النموذج المحملة حالياً من جدول قاعدة البيانات وتعيد قيمة منطقية.
  • الدالة الساكنة (Model::destroy): تقبل مفتاحاً أساسياً واحداً أو مصفوفة مفاتيح وتعيد عدد السجلات المحذوفة.
  • إطلاق أحداث النموذج (Model Events): كلا الأسلوبين يحملان الكائنات في الذاكرة لضمان تنفيذ أحداث الحذف بدقة.
مخطط معماري يوضح حذف النماذج وتطبيق الحذف الناعم Soft Deletes في Laravel في إطار العمل Laravel 12
PHP
$post = Post::findOrFail(10);
$post->delete();

$deletedCount = Post::destroy([11, 12, 15]);

Post::where('views', 0)->delete();

يحمي الحذف الناعم سجلات العمل الحساسة عبر تسجيل طابع زمني في عمود deleted_at بدلاً من إزالة الصف فعلياً من جدول قاعدة البيانات. بمجرد إضافة سمة SoftDeletes إلى كلاس النموذج ودالة softDeletes في ملف التهجير، تستبعد استعلامات Eloquent القياسية السجلات المؤرشفة تلقائياً.

  • سمة الحذف الناعم (SoftDeletes Trait): تطبق نطاق استعلام عاماً يستبعد تلقائياً كل صف يحتوي على قيمة في عمود deleted_at.
  • دالة التهجير (softDeletes Column): تضيف عمود طابع زمني يقبل القيمة الفارغة باسم deleted_at إلى جدول القاعدة.
  • تحديث غير مدمر (Non-Destructive Delete): استدعاء دالة delete يحدث قيمة عمود تاريخ الحذف بالوقت الحالي دون مسح الصف.
PHP
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Post extends Model
{
    use SoftDeletes;
}

عند بناء سلة المحذوفات في لوحة الإدارة أو سجلات التدقيق، يمكنك تضمين السجلات المحذوفة ناعماً بجانب السجلات النشطة عبر دالة withTrashed. أما لحصر نتائج الاستعلام في السجلات المؤرشفة فقط التي تملك طابعاً زمنياً في عمود الحذف، فاستخدم دالة النطاق onlyTrashed قبل جلب البيانات.

  • شمل المحذوفات (withTrashed): يوقف فلتر الاستبعاد الافتراضي مؤقتاً ليعيد الاستعلام السجلات النشطة والمؤرشفة معاً.
  • حصر المؤرشفات (onlyTrashed): يعدل شرط الاستعلام ليجلب حصرياً السجلات التي تحتوي على تاريخ حذف فعلي.
  • فحص حالة الكائن (trashed Method): يتحقق برمجياً مما إذا كانت نسخة النموذج المحملة حالياً في حالة حذف ناعم.
PHP
$allPosts = Post::withTrashed()->get();

$archived = Post::onlyTrashed()
    ->where('author_id', 5)
    ->get();

يمكن إعادة السجلات المحذوفة ناعماً إلى حالتها النشطة في أي وقت عبر استدعاء دالة restore التي تعيد قيمة عمود deleted_at إلى null. وعندما يلزم مسح السجل نهائياً من قاعدة البيانات للامتثال القانوني أو تنظيف المساحة، تنفذ دالة forceDelete أمر حذف فعلي لا رجعة فيه.

  • دالة الاستعادة (restore): تفرغ قيمة الطابع الزمني في deleted_at وتطلق أحداث الاستعادة الخاصة بالنموذج.
  • الاستعادة الجماعية (Bulk Restore): يمكن ربطها مباشرة مع استعلام onlyTrashed لإلغاء أرشفة مجموعة سجلات دفعة واحدة.
  • الحذف النهائي (forceDelete): يتجاوز حماية الحذف الناعم ويمسح الصف نهائياً من جدول قاعدة البيانات.
PHP
$post = Post::onlyTrashed()->findOrFail(10);
$post->restore();

$spam = Post::withTrashed()->findOrFail(99);
$spam->forceDelete();

لأتمتة تنظيف السجلات المؤرشفة القديمة أو منتهية الصلاحية، يوفر Laravel سمتي Prunable و MassPrunable لتعريف استعلام التنظيف داخل النموذج نفسه. تشغيل أمر Artisan المخصص للتقليم يمسح السجلات المطابقة على دفعات متتالية بحيث تبقى جداول الإنتاج خفيفة دون تجميد الصفوف.

  • سمة التقليم التلقائي (Prunable Trait): تعرف دالة prunable التي تعيد استعلاماً يحدد السجلات القديمة الواجب إزالتها.
  • خطاف التنظيف المسبق (pruning Hook): دالة اختيارية داخل النموذج لحذف الملفات المرفقة من التخزين قبل إزالة السجل.
  • التقليم الجماعي السريع (MassPrunable): ينفذ استعلام حذف SQL جماعياً لكل دفعة لتحقيق سرعة عالية عند عدم الحاجة للأحداث.
PHP
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Prunable;

public function prunable(): Builder
{
    return static::onlyTrashed()
        ->where('deleted_at', '<=', now()->subMonth());
}

يعتمد اختيار استراتيجية الحذف المناسبة في Laravel على مدى حاجتك لاسترجاع البيانات المؤرشفة أو تشغيل أحداث النموذج أو المسح السريع بالجملة. يجمع دمج الحذف الناعم مع التقليم المجدول بين منح المستخدم فترة أمان للاستعادة والحفاظ على نظافة قاعدة البيانات على المدى الطويل.

وجه المقارنة الهندسيالأسلوب اليدوي أو غير المحسنمعيار Laravel 12 الحديث
فقدان البيانات بالخطأتنفيذ حذف SQL فعلي فوري على محتوى المستخدمينتفعيل سمة SoftDeletes مع عمود الطابع الزمني deleted_at
تصفية السجلات النشطةكتابة شرط يدوي لاستبعاد المحذوفات في كل استعلامتطبيق نطاق SoftDeletingScope العام تلقائياً في كل قراءة
حذف مجموعة معرفاتالدوران اليدوي وتنفيذ استعلامات حذف خام تتجاهل الأحداثاستخدام الدالة الساكنة Model::destroy مع تفعيل أحداث النموذج
تنظيف الأرشيف القديمكتابة سكربتات يدوية تجمد الجداول الكبيرة أثناء المسحاستخدام سمة Prunable مع أمر التقليم المجدول على دفعات
PHP
if ($post->trashed()) {
    $post->restore();
}

Post::onlyTrashed()
    ->where('deleted_at', '<', now()->subYear())
    ->forceDelete();
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

أتقنت في هذا الدرس حول «حذف النماذج وتطبيق الحذف الناعم Soft Deletes في Laravel» مفاهيم حذف النماذج بدالة Delete المباشرة، وتفعيل الحذف الناعم SoftDeletes، واستعلام السجلات المحذوفة ناعما وفق معايير Laravel 12 الحديثة.

الخطوة التالية والدرس القادم

انتقل الآن إلى الدرس التالي «تحويل الأنواع والمسترجعات والمعدلات ومصانع النماذج في Eloquent» للبناء التراكمي على ما تعلمته.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Soft Deletes الحذف الناعم
حذف السجلات وتفعيل سمة الحذف الناعم SoftDeletes لاستعلام البيانات المؤرشفة واستعادتها بـ restore أو حذفها نهائياً.
للمراجعة
02 Deleting Models and Destroy حذف النماذج بدالة Delete المباشرة
المفهوم الهندسي والتطبيق العملي المباشر لقسم حذف النماذج بدالة Delete المباشرة في إطار العمل Laravel 12.
للمراجعة
03 Enabling Eloquent Soft Deletes تفعيل الحذف الناعم SoftDeletes
المفهوم الهندسي والتطبيق العملي المباشر لقسم تفعيل الحذف الناعم SoftDeletes في إطار العمل Laravel 12.
للمراجعة
04 Querying Soft Deleted Models استعلام السجلات المحذوفة ناعما
المفهوم الهندسي والتطبيق العملي المباشر لقسم استعلام السجلات المحذوفة ناعما في إطار العمل Laravel 12.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 MVC MVC
Model View Controller
النمط المعماري الذي يفصل بين نماذج البيانات Models، وطبقات العرض Views، والمتحكمات Controllers في Laravel.
للمراجعة
02 CLI CLI
Command Line Interface
واجهة سطر الأوامر التي تعمل عبر أداة php artisan لتوليد الملفات وإدارة التطبيق.
للمراجعة
03 HTTP HTTP
Hypertext Transfer Protocol
بروتوكول نقل النص الفائق الذي ينظم طلبات المتصفح واستجابات خادم Laravel.
للمراجعة
04 PSR PSR
PHP Standards Recommendations
المعايير القياسية للغة PHP مثل التحميل التلقائي PSR-4 التي يلتزم بها إطار العمل Laravel.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. اكتب ونفّذ المثال البرمجي المشروح في قسم «حذف النماذج بدالة Delete المباشرة» داخل مشروع Laravel 12 المحلي وتحقق من النتيجة.

  2. بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم «تفعيل الحذف الناعم SoftDeletes» وقارن مخرجات التنفيذ.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 3أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

ما الهدف الهندسي الأساسي من حذف النماذج بدالة Delete المباشرة في إطار العمل Laravel 12؟

يسهم حذف النماذج بدالة Delete المباشرة في تنظيم منطق التطبيق بأسلوب معياري آمن وقابل للصيانة في Laravel 12.

02

يساعد الالتزام باصطلاحات Laravel 12 الرسمية في قسم «تفعيل الحذف الناعم SoftDeletes» على رفع جودة الكود وسهولة اختباره آلياً.

صواب؛ الالتزام بالمعايير القياسية في Laravel 12 يجعل الكود واضحاً وسهل الفحص والصيانة.

03

أي آلية في Laravel 12 تتولى إدارة استعلام السجلات المحذوفة ناعما بشكل مباشر ومنظم؟

توفر طبقة إطار العمل وحاوية الخدمات في Laravel 12 الأدوات القياسية لإدارة استعلام السجلات المحذوفة ناعما.

04

لماذا يُعد تطبيق استعادة السجلات والحذف النهائي مهماً عند بناء تطبيقات Laravel 12 جاهزة للإنتاج؟

لأنه يمنع الأخطاء البرمجية الخفية ويوحد سلوك التطبيق بين بيئتي التطوير والإنتاج.

05

في Laravel 12، يُنصح بكتابة مفاتيح الإنتاج السرية مباشرة داخل ملفات الكود المصدري المرفوعة إلى Git بدلاً من ملفات البيئة.

خطأ؛ يجب حفظ المفاتيح والبيانات السرية في متغيرات البيئة وعدم رفعها أبداً إلى مستودع Git.

06

ما المزايا الهندسية التي يحققها تطبيق الحذف بالجملة وتقليم النماذج في Laravel 12؟ (اختر كل ما ينطبق)

يوفر فصلاً واضحاً للمسؤوليات، وأماناً أعلى أثناء التنفيذ، وتعاوناً أسهل بين أفراد الفريق.

07

يوظف إطار العمل Laravel 12 ميزات PHP 8 الحديثة مثل تحديد أنواع القيم المرجعة لجعل الكود أكثر وضوحاً وأماناً.

صواب؛ يعتمد Laravel 12 بشكل كامل على الصياغة الحديثة للغة PHP 8.2+ وسلامة الأنواع.

08

ما الفرق الجوهري بين معيار Laravel 12 الحديث والملفات اليدوية التقليدية في ملخص طرق حذف النماذج؟

يوفر Laravel 12 واجهات قياسية موحدة وحماية مدمجة تغني عن الكود اليدوي المعرض للأخطاء.