كيفية إنشاء نموذج (Model) في Laravel: دليل شامل ومفصل
يعتبر إطار العمل Laravel من أكثر أُطر تطوير الويب شهرةً وانتشاراً في عالم PHP، ويرجع ذلك إلى سهولة استخدامه، مرونته، وقوته في بناء تطبيقات الويب الحديثة. من أهم المفاهيم التي يعتمد عليها Laravel هو مفهوم النماذج (Models)، والتي تمثل الطريقة التي يتفاعل بها التطبيق مع قواعد البيانات بشكل مباشر. النموذج هو الطبقة المسؤولة عن التعامل مع البيانات، والتحكم في قواعد البيانات، وإنشاء علاقة بين البيانات داخل التطبيق.
في هذا المقال، سنناقش بتفصيل مطول وموسع كيفية إنشاء نموذج في Laravel، مع شرح مفصل لكل خطوة ومفهوم يرتبط بها، مع التركيز على أفضل الممارسات وكيفية تحقيق أقصى استفادة من النماذج في إطار Laravel.
1. مفهوم النموذج (Model) في Laravel
النموذج في Laravel هو تمثيل لكائن أو جدول في قاعدة البيانات. عند استخدام النموذج، يقوم Laravel تلقائيًا بربطه بجدول في قاعدة البيانات بحيث يمكن تنفيذ عمليات CRUD (إنشاء، قراءة، تحديث، حذف) بسهولة. في الأساس، كل نموذج يرتبط بجدول واحد، وكل سجل في الجدول يُمثّل بواسطة كائن من النموذج.
تعتمد نماذج Laravel على تقنية Eloquent ORM، وهي اختصار لـ Object-Relational Mapping، أي الربط بين قواعد البيانات والنماذج بشكل كائنات برمجية. من خلال Eloquent، يمكنك استخدام طرق برمجية سهلة للتعامل مع البيانات بدلاً من كتابة استعلامات SQL معقدة يدويًا.
2. إعداد بيئة العمل لإنشاء نموذج في Laravel
قبل البدء بإنشاء النموذج، يجب أن تكون البيئة جاهزة للعمل. لذلك، تأكد من التالي:
-
وجود نسخة من Laravel مثبتة على جهازك.
-
وجود قاعدة بيانات مفعّلة ومتصلة بمشروع Laravel.
-
إعداد ملف
.envليحتوي على إعدادات الاتصال بقاعدة البيانات مثل:
envDB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=database_name DB_USERNAME=root DB_PASSWORD=password
بعد التأكد من إعداد قاعدة البيانات، يمكن الانتقال لإنشاء النموذج.
3. كيفية إنشاء نموذج (Model) في Laravel
3.1 الأمر الأساسي لإنشاء نموذج
لإنشاء نموذج جديد في Laravel، يتم استخدام أمر artisan الخاص بـ Laravel، وهو أداة سطر الأوامر التي تسهل العديد من المهام، بما في ذلك إنشاء النماذج.
الأمر الأساسي لإنشاء نموذج هو:
bashphp artisan make:model ModelName
مثال:
bashphp artisan make:model Post
هذا الأمر سينشئ ملف نموذج باسم Post.php داخل مجلد app/Models (في Laravel 8 والإصدارات الأحدث)، أو في مجلد app إذا كنت تستخدم إصدارًا أقدم.
3.2 إنشاء نموذج مع ملف هجرة (Migration)
عادة ما يتم إنشاء النموذج مع ملف هجرة (Migration) لتسهيل إنشاء جدول مخصص في قاعدة البيانات. يمكن إنشاء النموذج مع ملف الهجرة باستخدام الأمر:
bashphp artisan make:model Post -m
المفتاح -m أو --migration يعني إنشاء ملف هجرة مرتبط بالنموذج.
بعد تنفيذ الأمر، ستجد ملف الهجرة داخل مجلد database/migrations والذي يمكنك تعديله لتعريف بنية الجدول.
3.3 إنشاء نموذج مع ملف مصنع بيانات (Factory) ومصادر أخرى
Laravel يسمح لك بإنشاء نموذج مع ملفات مساعدة أخرى مثل factory، seeder، controller، وغيرها عبر مفاتيح الأمر، مثل:
bashphp artisan make:model Post -mfsc
شرح مفاتيح الأمر:
-
-m: إنشاء ملف هجرة (Migration). -
-f: إنشاء ملف مصنع بيانات (Factory). -
-s: إنشاء ملف Seeder. -
-c: إنشاء ملف Controller.
استخدام هذه الخيارات مفيد جداً لتسريع تطوير التطبيق.
4. تركيب نموذج Laravel
بعد إنشاء النموذج، يظهر داخل مجلد app/Models (حسب الإصدار)، وهو ملف PHP يحتوي على كلاس يمثل الجدول في قاعدة البيانات.
php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
use HasFactory;
}
4.1 الشرح التفصيلي:
-
namespace App\Models;تحدد مكان النموذج داخل المشروع. -
use Illuminate\Database\Eloquent\Model;يرث النموذج من الكلاس الأساسي Model الذي يوفر وظائف ORM. -
use HasFactory;يتيح استخدام مصانع البيانات.
4.2 ربط النموذج بجدول قاعدة البيانات
بشكل افتراضي، Laravel يربط نموذج Post بجدول باسم posts (أي جمع اسم النموذج وتحويله إلى صيغة الجمع).
إذا أردت ربط النموذج بجدول مختلف، يمكنك تحديد اسم الجدول في خاصية $table داخل الكلاس:
phpprotected $table = 'my_custom_table';
4.3 تحديد المفاتيح الأساسية (Primary Key)
افتراضيًا، يفترض Laravel أن المفتاح الأساسي في الجدول هو عمود باسم id.
إذا كان المفتاح الأساسي مختلفًا، يمكن تحديده باستخدام خاصية $primaryKey:
phpprotected $primaryKey = 'post_id';
4.4 تعطيل الطابع الزمني (Timestamps)
Laravel يفترض وجود عمودين في الجدول هما created_at و updated_at لإدارة تاريخ الإنشاء والتحديث.
إذا كان الجدول لا يحتوي على هذه الأعمدة، يمكن تعطيل هذه الميزة:
phppublic $timestamps = false;
4.5 التحكم في الحقول التي يمكن ملؤها (Mass Assignment)
عند استخدام التخصيص الجماعي (Mass Assignment)، يجب تعريف الحقول التي يمكن ملؤها أو التي لا يمكن ملؤها:
-
تعريف الحقول القابلة للملء باستخدام
$fillable:
phpprotected $fillable = ['title', 'content', 'author_id'];
-
أو تعطيل الحماية من التخصيص الجماعي باستخدام
$guarded:
phpprotected $guarded = [];
5. استخدام النموذج للتفاعل مع قاعدة البيانات
النموذج هو الوسيط الأساسي لتنفيذ العمليات على البيانات، وهنا بعض الأمثلة العملية:
5.1 إنشاء سجل جديد
php$post = new Post();
$post->title = 'عنوان المقال';
$post->content = 'محتوى المقال التفصيلي...';
$post->author_id = 1;
$post->save();
أو باستخدام التخصيص الجماعي:
phpPost::create([
'title' => 'عنوان المقال',
'content' => 'محتوى المقال التفصيلي...',
'author_id' => 1,
]);
5.2 قراءة البيانات
-
قراءة جميع السجلات:
php$posts = Post::all();
-
قراءة سجل معين بواسطة المفتاح الأساسي:
php$post = Post::find(1);
-
استخدام شروط معقدة:
php$posts = Post::where('author_id', 1)->orderBy('created_at', 'desc')->get();
5.3 تحديث سجل
php$post = Post::find(1);
$post->title = 'العنوان الجديد';
$post->save();
5.4 حذف سجل
php$post = Post::find(1);
$post->delete();
6. العلاقات بين النماذج
النماذج في Laravel تسمح بإنشاء علاقات بين الجداول بطرق سهلة وواضحة، أهمها:
-
علاقة واحد إلى واحد (One to One)
-
علاقة واحد إلى متعدد (One to Many)
-
علاقة متعدد إلى متعدد (Many to Many)
-
علاقة التوريث (Polymorphic Relations)
6.1 مثال علاقة واحد إلى متعدد
في نموذج User:
phppublic function posts()
{
return $this->hasMany(Post::class);
}
وفي نموذج Post:
phppublic function user()
{
return $this->belongsTo(User::class);
}
هذه العلاقات تسهل التعامل مع البيانات المرتبطة بكفاءة.
7. طرق متقدمة في النماذج
7.1 استخدام السمات Accessors و Mutators
يمكن تعديل طريقة الحصول على القيم أو تخزينها في النموذج باستخدام Accessors و Mutators.
مثال Accessor لتحويل العنوان إلى حروف كبيرة:
phppublic function getTitleAttribute($value)
{
return strtoupper($value);
}
مثال Mutator لتخزين العنوان بعد تنظيفه:
phppublic function setTitleAttribute($value)
{
$this->attributes['title'] = trim($value);
}
7.2 النطاقات Scopes
النطاقات هي طرق لتحديد شروط مكررة يمكن إعادة استخدامها بسهولة في الاستعلامات.
مثال:
phppublic function scopePublished($query)
{
return $query->where('is_published', true);
}
الاستخدام:
php$posts = Post::published()->get();
7.3 تحميل العلاقات مع النموذج
لتقليل عدد الاستعلامات، يمكن تحميل العلاقات مسبقًا باستخدام with:
php$posts = Post::with('user')->get();
8. إدارة ملفات الهجرة (Migrations) الخاصة بالنموذج
بعد إنشاء النموذج مع ملف الهجرة، يجب تعديل ملف الهجرة لتعريف بنية الجدول.
مثال على ملف هجرة لنموذج Post:
phppublic function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('content');
$table->foreignId('author_id')->constrained('users')->onDelete('cascade');
$table->timestamps();
});
}
ثم تنفيذ الهجرة باستخدام:
bashphp artisan migrate
9. خلاصة حول إنشاء نموذج في Laravel
-
النموذج هو جسر بين التطبيق وقاعدة البيانات.
-
يتم إنشاؤه عبر أمر
php artisan make:model. -
من الأفضل ربطه بملف هجرة لتحديد بنية الجدول.
-
يمكن تخصيص النموذج بتحديد الجدول، المفتاح الأساسي، والحقول القابلة للملء.
-
يدعم Laravel إنشاء علاقات متعددة بين النماذج لتعزيز إدارة البيانات.
-
يوفر ميزات متقدمة مثل Accessors, Mutators, وScopes لتحسين التعامل مع البيانات.
-
استخدام النموذج مع ملفات الهجرة ومصانع البيانات يسهل عمليات التطوير والاختبار.
10. جدول ملخص لأهم خصائص نموذج Laravel
| الخاصية/الطريقة | الوصف | الاستخدام النموذجي |
|---|---|---|
$table |
تحديد اسم الجدول في قاعدة البيانات | protected $table = 'my_table'; |
$primaryKey |
تحديد المفتاح الأساسي للجدول | protected $primaryKey = 'user_id'; |
$timestamps |
تعطيل أو تفعيل الأعمدة الزمنية | public $timestamps = false; |
$fillable |
تحديد الحقول القابلة للتعبئة الجماعية |

