لارافيل, Model / 2024-04-28

الخصائض $fillable و $guarded في Laravl Model

الخصائض $fillable و $guarded في Laravl Model

2024-04-28 وقت القراءه : 1 دقائق

لفرض أن لدينا الموديل التالي

{}class Article extends Model

ولدينا الجدول التالي

public function up(){
    Schema::create('articles', function (Blueprint $table) {
        $table->id();
        $table->string('title');
        $table->text('text');
        $table->timestamps();
    });
 }

ولدينا هذا الفورم

 

كيف يمكن إدخال البيانات في قاعدة البيانات؟

للقيام بذلك يمكن إستخدام عدة طرق

الطريقة الأولى

public function store(Request $request)
 {
    $article = new Article();
    $article->title = $request->title;
    $article->text = $request->text;
    $article->save();
}

 

لكن ماذا لو إنه لدينا 10 حقول وأكثر هل يجب أن نكتبها واحدة واحدة؟ الجواب هو لا حيث يمكن إدخالها كما يلي:

public function store(Request $request){
    Article::create($request->all());
 }

لكن إستخدام الطريقة أعلاه سوف يسبب المشكله التالية

Illuminate\Database\Eloquent\MassAssignmentException
Add [_token] to fillable property to allow mass assignment on [App\Models\Article].

الخطأ أعلاه يعني أننا نحاول إدخال حفظ token في قاعدة البيانات، مع العلم أنه يأتي كحقل مخفي

<form method="post" action="{{  route('article.store') }}">
      @csrf

 

ولتجنب ذلك يجب أن نحدد الحقول التي يجب إدخالها في الـ Model كـ fillable

class Article extends Model{
    protected $fillable = [ 'title', 'text'];
 }

وهذا يعني أنه فقط الحقول المحددة كـ fillable هي من سيتم إدخالها.

 لكن السؤال ماذا لو إنه لدي 10 حقول وأكثر هل يجب كتابتها جميعها؟

الجواب هو لا، بل يمكن إستخدام $guard حيث يتم تحديد الحقول التي لا يجب إدخالها في قاعدة البيانات.

protected $guarded = ['id'];

بمعنى أن $fillable هي عكس $guard

 


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

يعطكم العافية

عمر بدوي
منذ 3 سنوات

شرح رائع ومبسط

Penelope Craig
منذ 3 سنوات

Id esse qui repudi

ابراهيم حسن
منذ 3 سنوات

جزاك الله خيرا ❤❤❤

منتصر إبراهيم
منذ 3 سنوات

جزاك الله خيرا

زائر
منذ سنتين

تسلم

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