شرح العلاقات في Laravel: One to One، One to Many، Has Many

Amine
07/09/2024

شرح العلاقات في 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. فهم هذه العلاقات يساعدك في تنظيم بياناتك بشكل فعّال ويمكنك من بناء أنظمة أكثر تعقيدًا ومرونة. قم بتطبيق الأمثلة على مشروعك لتثبيت المفاهيم وتأكد من تجربة مختلف العلاقات وفقًا لاحتياجات مشروعك.

التعليقات

اترك تعليقاً