"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > خيوط: حذف المرفقات عند حذف سجل

خيوط: حذف المرفقات عند حذف سجل

تم النشر بتاريخ 2024-11-08
تصفح:715

Filament: Delete Attachments when Deleting a Record

يسمح لك Filament بإضافة مرفقات إلى سجل، لكنه لا يحذفها عند حذف السجل.

لحل هذه المشكلة، لدينا بديلان:

استمع إلى حدث حذف النموذج

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

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

class Project extends Model
{
    protected $fillable = [
        'title', 'slug', 'repository', 'description', 'thumbnail',
    ];

    /**
     * The "booted" method of the model.
     */
    protected static function booted(): void
    {
        static::deleting(function ($project) {
            Storage::disk('public')->delete($project->thumbnail);
        });
    }
}

سيؤدي هذا الرمز إلى حذف المرفق المصغر قبل حذف النموذج.

يمكنك قراءة المزيد عن هذا في وثائق Laravel https://laravel.com/docs/11.x/eloquent#events-using-closures

تعديل إجراء الحذف الخاص بالخيط

هناك خيار آخر وهو تغيير سلوك إجراء الحذف.

protected function getActions(): array
{
    return [
        Actions\DeleteAction::make()
            ->after(function (Project $project) {
                // delete single
                if ($project->thumbnail) {
                    Storage::disk('public')->delete($project->thumbnail);
                }
            })
    ];
}

يمكنك استخدام الخيار الذي يناسب متطلباتك بشكل أفضل، ولكن يجب أن تضع في اعتبارك أن إضافة مستمع الحدث سيؤدي إلى حذف المرفق عند حذف النموذج الخاص بك، كلما حدث ذلك من خلال إجراء Filament أو جزء آخر من التعليمات البرمجية في تطبيقك.

هذا أمر مهم لأنه من المحتمل أن يحدد الخيار الذي يجب عليك اختياره.

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/sertxudev/filament-delete-attachments-when-deleting-a-record-1jhl?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3