الدورات
title
مقدمة عن Eloquent في Laravel: النماذج والعلاقات
مقدمة عن Eloquent في Laravel: النماذج والعلاقات
مقدمة
يُعتبر Eloquent ORM من أقوى المكونات في إطار العمل Laravel، حيث يُتيح للمطور التعامل مع قاعدة البيانات بطريقة برمجية بسيطة وسهلة القراءة دون الحاجة إلى كتابة استعلامات SQL معقدة.
يعتمد Eloquent على مبدأ البرمجة الكائنية (OOP) بحيث يتم تمثيل كل جدول في قاعدة البيانات على شكل نموذج (Model) داخل المشروع.
في هذا المقال سنتعرف على النماذج في Laravel، ثم نشرح العلاقات الأساسية بين الجداول وهي: One-to-One، One-to-Many، وMany-to-Many.
ما هو النموذج (Model) في Laravel؟
النموذج هو الكلاس الذي يمثل جدولًا في قاعدة البيانات.
على سبيل المثال، إذا كان لدينا جدول باسم users، فسيكون هناك نموذج يسمى User يمثل هذا الجدول ويتعامل مع بياناته من خلال Eloquent.
مثال على إنشاء نموذج:
php artisan make:model User
سيتم إنشاء الملف التالي:
app/Models/User.php
محتوى نموذج المستخدم:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
protected $fillable = ['name', 'email', 'password'];
}
fillableتحدد الحقول التي يمكن تعبئتها مباشرة عند استخدامcreate().- هذا النموذج يتعامل تلقائيًا مع الجدول
usersلأن Laravel يربط اسم النموذج باسم الجدول بصيغة الجمع.
العلاقات في Eloquent ORM
العلاقات (Relationships) في Laravel تُستخدم لربط الجداول ببعضها بطريقة منطقية.
على سبيل المثال، يمكن أن يكون للمستخدم حساب واحد (One-to-One)، أو عدة مقالات (One-to-Many)، أو مشترك في عدة أدوار (Many-to-Many).
العلاقة الأولى: One-to-One (واحد إلى واحد)
التعريف:
هي علاقة يكون فيها كل سجل في الجدول الأول مرتبطًا بسجل واحد فقط في الجدول الثاني.
مثال:
- كل مستخدم لديه ملف شخصي واحد (Profile).
- جدول
usersمرتبط بجدولprofiles.
نموذج المستخدم:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
public function profile()
{
return $this->hasOne(Profile::class);
}
}
نموذج الملف الشخصي:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Profile extends Model
{
public function user()
{
return $this->belongsTo(User::class);
}
}
استخدام العلاقة:
$user = User::find(1); echo $user->profile->phone_number;
العلاقة الثانية: One-to-Many (واحد إلى متعدد)
التعريف:
هي علاقة يكون فيها كل سجل من الجدول الأول مرتبطًا بعدة سجلات من الجدول الثاني.
مثلاً: المستخدم يمكن أن يكتب عدة مقالات.
نموذج المستخدم:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
public function posts()
{
return $this->hasMany(Post::class);
}
}
نموذج المقال:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
public function user()
{
return $this->belongsTo(User::class);
}
}
استخدام العلاقة:
$user = User::find(1);
foreach ($user->posts as $post) {
echo $post->title;
}
العلاقة الثالثة: Many-to-Many (متعدد إلى متعدد)
التعريف:
هي علاقة يكون فيها كل سجل من الجدول الأول يمكن أن يرتبط بعدة سجلات من الجدول الثاني، والعكس صحيح.
مثلاً: الطالب يمكن أن يسجل في عدة دورات، والدورة يمكن أن تحتوي على عدة طلاب.
مثال على الجداول:
- جدول
students - جدول
courses - جدول وسيط يسمى
course_studentيحتوي على الأعمدة: student_idcourse_id
نموذج الطالب:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Student extends Model
{
public function courses()
{
return $this->belongsToMany(Course::class);
}
}
نموذج الدورة:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Course extends Model
{
public function students()
{
return $this->belongsToMany(Student::class);
}
}
استخدام العلاقة:
$student = Student::find(1);
foreach ($student->courses as $course) {
echo $course->name;
}
نصائح هامة عند استخدام العلاقات
- استخدم أسماء العلاقات بدقة لتوضيح معناها مثل:
profile,posts,courses. - تأكد من أن أسماء المفاتيح الخارجية (foreign keys) مطابقة للاتفاقيات الافتراضية في Laravel.
- يمكنك استخدام
with()لتحميل العلاقات بشكل مسبق لتقليل عدد الاستعلامات إلى قاعدة البيانات.
$users = User::with('posts')->get();
- استخدم
belongsToMany()فقط عندما يكون لديك جدول وسيط (pivot table).
الخلاصة
يوفر Eloquent ORM في Laravel طريقة قوية ومنظمة للتعامل مع البيانات والعلاقات بين الجداول.
من خلال النماذج والعلاقات (One-to-One, One-to-Many, Many-to-Many)، يمكنك كتابة كود نظيف وسهل الفهم بدلًا من كتابة استعلامات SQL طويلة ومعقدة.
فهم العلاقات الأساسية في Eloquent خطوة مهمة لكل من يرغب في بناء تطبيقات ويب احترافية باستخدام
Laravel.