علاقات Eloquent (Relationships) واستعلامات الربط
في أي قاعدة بيانات حقيقية، لا تعيش البيانات في جزر معزولة. المستخدم يمتلك مقالات، والمقال يمتلك تصنيفات، والتصنيف يضم مئات المنشورات. في البرمجة التقليدية، ستحتاج لكتابة استعلامات JOIN معقدة ومملة. أما في Laravel، توفر لك Eloquent Relationships طريقة سحرية لتعريف هذه الروابط كدوال بسيطة داخل الـ Models، مما يجعل استرجاع البيانات المترابطة أمراً في غاية السهولة والأناقة.
1. علاقة واحد إلى كثير (One To Many)
هي العلاقة الأكثر شيوعاً، مثل مستخدم (واحد) يمتلك عدة مقالات (كثير). نقوم بتعريفها باستخدام hasMany و belongsTo:
app/Models/User.php
// المستخدم يمتلك مقالات
public function posts()
{
return $this->hasMany(Post::class);
}
app/Models/Post.php
// المقال ينتمي لمستخدم
public function user()
{
return $this->belongsTo(User::class);
}
2. استخدام العلاقات في الكود
بمجرد تعريف العلاقة، يمكنك الوصول للبيانات المرتبطة كأنها خصائص (Properties) عادية في الكائن، دون الحاجة لاستعلامات إضافية يدوية:
// جلب جميع مقالات المستخدم رقم 1
$user = User::find(1);
$posts = $user->posts;
// جلب صاحب المقال رقم 10
$post = Post::find(10);
echo $post->user->name;
3. علاقة كثير إلى كثير (Many To Many)
تستخدم عندما ينتمي سجل في الجدول الأول لعدة سجلات في الجدول الثاني، والعكس. مثال: المقال ينتمي لعدة وسوم (Tags)، والوسم يضم عدة مقالات. تتطلب هذه العلاقة جدولاً وسيطاً (Pivot Table).
// داخل ملف Post Model
public function tags()
{
return $this->belongsToMany(Tag::class);
}
أسئلة شائعة حول العلاقات
تحدث عندما يقوم لارافيل باستدعاء استعلام لكل سجل داخل الحلقة التكرارية. الحل هو استخدام **Eager Loading** عبر وظيفة
with()، مثال: Post::with('user')->get();. هذا يقلل مئات الاستعلامات إلى استعلامين فقط.
نعم، يتيح لك لارافيل تعريف اتصال (Connection) مختلف لكل Model، ويمكنك إنشاء علاقات Eloquent بينها طالما أن المحرك يدعم ذلك (مثل MySQL مع MySQL).
الدرس القادم
النماذج والتحقق من البيانات
تعلمنا كيف ننظم البيانات ونربطها، الآن سنكتشف كيف نستقبل بيانات المستخدم عبر النماذج (Forms) وكيف نتأكد من صحتها وأمانها قبل حفظها.
تعلم النماذج والتحقق