شرح العلاقات في Laravel: One to One، One to Many، Has Many
شرح العلاقات في Laravel: One to One, One to Many, Has Many Through بالتفصيل
في Laravel، تعتبر العلاقات بين الجداول أحد أهم الميزات التي تتيح لنا العمل مع قواعد البيانات بشكل سهل وفعّال. هناك عدة أنواع من العلاقات، مثل One to One، One to Many، وHas Many Through. في هذا الدرس، سنتناول شرحًا تفصيليًا لكل نوع من هذه العلاقات مع أمثلة عملية تساعدك على فهم كيفية تطبيقها بشكل صحيح في مشروعك.
1. العلاقة One to One في Laravel
العلاقة One to One تُستخدم عندما يكون لكل سجل في الجدول الأول سجل مرتبط واحد فقط في الجدول الآخر. على سبيل المثال، إذا كان لدينا جدول users
الذي يحتوي على المستخدمين وجدول profiles
الذي يحتوي على الملفات الشخصية، فكل مستخدم له ملف شخصي واحد.
خطوات إنشاء العلاقة One to One:
- تأكد من أن الجدولين متصلين عبر مفتاح خارجي (foreign key) مثل
user_id
في جدولprofiles
. - في موديل
User
، قم بإنشاء دالةprofile()
التي تُرجع العلاقة. - في موديل
Profile
، قم بإنشاء دالةuser()
لربط العلاقة العكسية.
// في موديل User
public function profile()
{
return $this->hasOne(Profile::class);
}
// في موديل Profile
public function user()
{
return $this->belongsTo(User::class);
}
لجلب البيانات المرتبطة، يمكنك استخدام:
// جلب ملف التعريف الخاص بالمستخدم
$user = User::find(1);
$profile = $user->profile;
أو لجلب المستخدم المرتبط بملف شخصي معين:
// جلب المستخدم الخاص بملف تعريف معين
$profile = Profile::find(1);
$user = $profile->user;
2. العلاقة One to Many في Laravel
العلاقة One to Many تُستخدم عندما يمكن لكل سجل في الجدول الأول أن يكون له عدة سجلات في الجدول الآخر. مثال على ذلك هو العلاقة بين User
وPost
، حيث يمكن أن يكون لدى المستخدم العديد من المنشورات.
خطوات إنشاء العلاقة One to Many:
- في جدول
posts
، يجب أن يحتوي على حقلuser_id
كمفتاح خارجي يشير إلى المستخدم. - في موديل
User
، قم بإنشاء دالةposts()
التي تُرجع علاقةhasMany()
. - في موديل
Post
، قم بإنشاء دالةuser()
التي تُرجع علاقةbelongsTo()
.
// في موديل User
public function posts()
{
return $this->hasMany(Post::class);
}
// في موديل Post
public function user()
{
return $this->belongsTo(User::class);
}
لجلب البيانات، يمكنك استخدام:
// جلب كل المنشورات الخاصة بمستخدم معين
$user = User::find(1);
$posts = $user->posts;
أو لجلب المستخدم الذي كتب المنشور:
// جلب المستخدم الخاص بمنشور معين
$post = Post::find(1);
$user = $post->user;
3. العلاقة Has Many Through في Laravel
العلاقة Has Many Through تُستخدم عندما تريد الوصول إلى البيانات في جدول من خلال جدول وسيط. على سبيل المثال، إذا كان لدينا جدول countries
يحتوي على العديد من المستخدمين (users)، ولكل مستخدم عدة منشورات (posts)، يمكننا استخدام Has Many Through
لجلب جميع المنشورات المرتبطة ببلد معين عبر المستخدمين.
خطوات إنشاء العلاقة Has Many Through:
- في جدول
users
يجب أن يحتوي على مفتاح خارجي يشير إلىcountry_id
. - في جدول
posts
يجب أن يحتوي على مفتاح خارجي يشير إلىuser_id
. - في موديل
Country
، قم بإنشاء دالةposts()
التي تُرجع علاقةhasManyThrough()
.
// في موديل Country
public function posts()
{
return $this->hasManyThrough(Post::class, User::class);
}
لجلب المنشورات الخاصة ببلد معين، يمكنك استخدام:
// جلب كل المنشورات الخاصة ببلد معين
$country = Country::find(1);
$posts = $country->posts;
الخاتمة
في هذا الدرس، تعرفنا على العلاقات الثلاثة الأساسية في Laravel وهي: One to One، One to Many، وHas Many Through. فهم هذه العلاقات يساعدك في تنظيم بياناتك بشكل فعّال ويمكنك من بناء أنظمة أكثر تعقيدًا ومرونة. قم بتطبيق الأمثلة على مشروعك لتثبيت المفاهيم وتأكد من تجربة مختلف العلاقات وفقًا لاحتياجات مشروعك.
اترك تعليقاً