علاقات Eloquent
عرّفوا علاقات hasOne وhasMany وbelongsTo والعلاقات المتعددة إلى المتعددة
علاقات Eloquent درس مجاني في PHP Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في PHP Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة PHP Academy 4 دروس في المجموع.
لماذا نستخدم العلاقات؟
تتيح علاقات Eloquent الاستعلام عن النماذج المرتبطة باستخدام PHP واضحة بدلًا من عبارات SQL JOIN الخام.
hasOne
يمتلك User ملف Profile واحدًا. عرّف العلاقة في النموذج المالك.
<?php
class User extends Model {
public function profile(): \Illuminate\Database\Eloquent\Relations\HasOne {
return $this->hasOne(Profile::class);
}
}
// Access:
$profile = $user->profile;belongsTo
ينتمي Profile إلى User. عرّف العلاقة في النموذج الذي يحتوي على المفتاح الخارجي.
<?php
class Profile extends Model {
public function user(): \Illuminate\Database\Eloquent\Relations\BelongsTo {
return $this->belongsTo(User::class);
}
}
// Access:
$user = $profile->user;hasMany
يمتلك User عدة Posts. هذه علاقة واحد إلى متعدد من جهة النموذج الأب.
<?php
class User extends Model {
public function posts(): \Illuminate\Database\Eloquent\Relations\HasMany {
return $this->hasMany(Post::class);
}
}
// Access:
$posts = $user->posts; // CollectionbelongsTo (جهة المتعدد)
ينتمي كل Post إلى User.
<?php
class Post extends Model {
public function author(): \Illuminate\Database\Eloquent\Relations\BelongsTo {
return $this->belongsTo(User::class, "user_id");
}
}متعدد إلى متعدد (belongsToMany)
يمتلك Post عدة Tags، وينتمي Tag إلى عدة Posts، ويربط بينها جدول محوري.
<?php
class Post extends Model {
public function tags() {
return $this->belongsToMany(Tag::class);
}
}
// Pivot table: post_tag (post_id, tag_id)
$tags = $post->tags;
$post->tags()->attach($tagId);
$post->tags()->detach($tagId);
$post->tags()->sync([1, 2, 3]);hasManyThrough
يمكنك الوصول إلى النماذج المرتبطة على نحو غير مباشر؛ فمثلًا يمتلك Country عدة Posts عبر Users.
<?php
class Country extends Model {
public function posts() {
return $this->hasManyThrough(Post::class, User::class);
}
}العلاقات متعددة الأشكال
يمكن لنموذج Comment أن ينتمي إلى Post أو Video باستخدام العلاقات متعددة الأشكال.
<?php
class Comment extends Model {
public function commentable() {
return $this->morphTo();
}
}
class Post extends Model {
public function comments() {
return $this->morphMany(Comment::class, "commentable");
}
}استعلامات وجود العلاقات
استعلم عن النماذج استنادًا إلى وجود علاقة.
<?php
// Posts that have at least one comment:
$commented = Post::has("comments")->get();
// Posts with >= 3 comments:
$popular = Post::has("comments", ">=", 3)->get();whereHas
رشّح النتائج استنادًا إلى شروط العلاقة.
<?php
$phpPosts = Post::whereHas("tags", function ($q) {
$q->where("name", "PHP");
})->get();طرق العلاقات مقابل الخصائص الديناميكية
ترجع $user->posts() منشئ الاستعلام، ويمكنك تسلسل الاستدعاءات عليه. أما $user->posts فترجع Collection التي جرى تحميلها.
الملخص
عرّف العلاقات على هيئة طرق تُرجع hasOne أو hasMany أو belongsTo أو belongsToMany. ويمكنك الوصول إليها كخصائص ديناميكية أو تسلسل الاستعلامات انطلاقًا من استدعاء الطريقة.
تحقّق سريعًا
ما نوع العلاقة الذي يستخدم جدولًا محوريًا؟
الأسئلة الشائعة
هل درس «علاقات Eloquent» مجاني؟
نعم — نص درس «علاقات Eloquent» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة PHP Academy، انتقل إلى CoddyKit PRO. تتضمن دورة PHP Academy 4 دروس في المجموع.
ماذا ستتعلم في «علاقات Eloquent»؟
عرّفوا علاقات hasOne وhasMany وbelongsTo والعلاقات المتعددة إلى المتعددة تتمرن على PHP Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ PHP Academy؟
لا تُشترط خبرة سابقة. PHP Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «علاقات Eloquent»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس PHP Academy هذا؟
نعم. كل درس في PHP Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- نماذج Eloquent وعمليات الترحيل
- عمليات CRUD باستخدام Eloquent
- علاقات Eloquent
- التحميل المسبق ونطاقات الاستعلام