اذهب إلى المحتوى

السؤال

نشر

ما الفائدة من استخدام المصفوفة fillable في كل مودل؟

مثال:

class user extends Model{

	protected fillable = ['username', 'avatar', 'website_link'];

	....
}

ولماذا يتم استخدامها دوماً في المودل؟ هل يحدث خطأ في حال عدم استخدامها؟

Recommended Posts

  • 0
نشر

المصفوفة fillable ليست إجبارية و إنما يتم إستخدامها في حالة أردنا إتاحة التعيين الجماعي لبعض الحُقول و في هذه الحالة يتم وضع هذه الحقول بداخل هذه المصفوفة.

يمكن استخدام التابع create لحفظ سجل جديد في سطر وحيد. لكن قبل القيام بذلك، يجب أن تُعيّن أحد الخاصيات fillable بسبب حماية نماذج Eloquent افتراضيًّا من التعيين الجماعي.

لنفترض أنه لديك النموذج User والخاصية name و أردت إنشاء كائن من هذا النموذج ثم تخزينه في قاعدة البيانات فيُمكنك ذلك كالتالي:

public function store(Request $request)
{

  // تحقق من الطلب..

  $user = new User;
  $user->name = $request->name;
  $user->save();
}

بهذا الشكل أنت لم تستخدم التعيين الجماعي و في هذه الحالة لست بحاجة لإستخدام المصفوفة fillable. أما إن قمت بالعملية بهذا الشكل:

$user = User::create(['name' => 'John Doe']);

فسيتم رمي إستثناء من النوع MassAssignmentException و السبب هنا أنك تستخدم التعيين الجماعي و لارافل ستقوم بحمايتك. الآن إن أردت أن تحمي نفسك بنفسك و تُلغي تفعيل حماية لارافل ستستخدم المصفوفة fillable او guarded فالمصفوفة fillable هي بمثابة القائمة البيضاء نضع بها الحقول التي نسمح بتعيينها جماعياً و guarded عكسها.

هناك عدة توابع أخرى يُمكن إستعمال التعيين الجماعي معها منها update، firstOrCreate  و غيرها ..

  • 0
نشر

نحدد من خلالها الأعمدة القابلة للتعبئة,لاحظ رجاء السطر التالي

    protected $fillable = [
        'name','email','password',
    ];

فمثلا لو كانت Request تحتوي فقط على name و email و password فإن Request ستعمل دون مشاكل وسوف يتم تعبئة الأعمدة الخاصة بهذه الخصائص الموجودة في Request
ولكن لو كان مع Request خاصية أخرى مثل username فستحصل على مشكلة MassAssignmentException  لأن username غير موجودة في مصفوفة fillable

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...