في هذا الدرس 6تصفّح المواضيع
تربط علاقة واحد لواحد نموذجاً أباً بسجل واحد على الأكثر في جدول آخر، مثل امتلاك كل مستخدم لملف شخصي وحيد. يوجه استدعاء دالة hasOne داخل النموذج الأب إطار Eloquent لمطابقة المفتاح الأساسي للأب مع المفتاح الأجنبي القياسي user_id في الجدول التابع.
- تعريف الدالة (hasOne Method): تُعرّف داخل كلاس النموذج الأب الذي لا يحتوي جدوله على عمود المفتاح الأجنبي.
- اصطلاح المفتاح الأجنبي (Foreign Key Convention): يفترض تلقائياً اسم النموذج الأب بصيغة snake_case متبوعاً باللاحقة _id.
- تخصيص المفاتيح (Custom Keys): يتيح المعاملان الثاني والثالث تحديد اسم المفتاح الأجنبي والمفتاح المحلي يدوياً عند اختلافهما.
use Illuminate\Database\Eloquent\Relations\HasOne;
public function profile(): HasOne
{
return $this->hasOne(Profile::class);
}
$bio = $user->profile->bio;
للانتقال من النموذج التابع الذي يحمل المفتاح الأجنبي صعوداً إلى النموذج الأب المالك له، نعرف علاقة عكسية باستخدام دالة belongsTo. يضمن إلحاق دالة withDefault بالعلاقة العكسية إرجاع كائن نموذج افتراضي بديل عندما يكون المفتاح الأجنبي فارغاً، مما يمنع أخطاء القيم الفارغة في الواجهات.
- موقع العلاقة العكسية (belongsTo Location): تُوضع دائماً في كلاس النموذج الذي يحتوي جدوله فعلياً على عمود المفتاح الأجنبي.
- استنتاج المفتاح من الدالة (Key Inference): يفحص Eloquent اسم دالة العلاقة ويضيف إليه _id لتحديد عمود المفتاح الأجنبي.
- الكائن البديل الآمن (withDefault): يعيد كائن نموذج بديلاً بقيم افتراضية عند غياب الأب لمنع توقف العرض.
use Illuminate\Database\Eloquent\Relations\BelongsTo;
public function user(): BelongsTo
{
return $this->belongsTo(User::class)
->withDefault(['name' => 'Guest Author']);
}
تمثل علاقة واحد لمتعدد سجلاً أباً يمتلك عدداً غير محدود من السجلات التابعة، مثل قسم يضم عشرات المنتجات أو مقال يحتوي على عدة تعليقات. يعيد استدعاء دالة hasMany في النموذج الأب مجموعة Eloquent Collection تضم كافة السجلات الأبناء المرتبطة عند قراءتها كخاصية ديناميكية.
- التسمية بصيغة الجمع (Plural Method Name): يُسمى تابع العلاقة بصيغة الجمع مثل posts أو comments ليعكس إرجاع مجموعة سجلات.
- إرجاع مجموعة كائنات (Collection Result): قراءة الخاصية الديناميكية تعيد كائن Eloquent Collection قابلاً للدوران والتصفية.
- الاقتران العكسي (Inverse Pairing): يعرف النموذج الابن دالة مفردة بصيغة belongsTo تشير عكسياً إلى النموذج الأب.
use Illuminate\Database\Eloquent\Relations\HasMany;
public function comments(): HasMany
{
return $this->hasMany(Comment::class);
}
$count = $post->comments->count();
يوفر Eloquent طريقتين مختلفتين للتعامل مع العلاقة: قراءتها كخاصية تحمل كامل السجلات المرتبطة في الذاكرة، بينما استدعاؤها كدالة يعيد باني استعلام العلاقة. يتيح ربط الشروط بدالة العلاقة تنفيذ التصفية والترتيب مباشرة داخل قاعدة البيانات دون تحميل صفوف غير مطلوبة.
- الوصول كخاصية ديناميكية (Property Access): كتابة $user->posts بدون أقواس تنفذ استعلام الجلب فوراً وتعيد المجموعة كاملة.
- الاستدعاء كدالة استعلام (Method Call): كتابة $user->posts بالأقواس تعيد كائن باني الاستعلام لإضافة شروط مخصصة.
- التصفية في القاعدة (SQL Filtering): ربط دوال where أو latest بدالة العلاقة يقلل استهلاك ذاكرة الخادم بشكل كبير.
$allPosts = $user->posts;
$published = $user->posts()
->where('is_published', true)
->latest()
->get();
تشكل علاقات الواحد لواحد والواحد لمتعدد العمود الفقري لهيكلة البيانات العلائقية في تطبيقات Laravel. يضمن إتقان تحديد موقع المفتاح الأجنبي وتعريف العلاقة العكسية belongsTo واستخدام باني استعلام العلاقة تنقلاً وحفظاً للبيانات بأعلى درجات النظافة والموثوقية.
| وجه المقارنة الهندسي | الأسلوب اليدوي أو غير المحسن | معيار Laravel 12 الحديث |
|---|---|---|
| جلب السجلات التابعة | كتابة شرط المفتاح الأجنبي يدوياً في كل استعلام بالمتحكم | تعريف علاقة hasMany في النموذج واستدعائها مباشرة |
| حساب عدد الأبناء | تحميل كافة الكائنات في الذاكرة ثم عدها عبر المجموعة | استدعاء count على دالة العلاقة لتنفيذ عد مباشر في القاعدة |
| المفاتيح الأجنبية الاختيارية | تكرار فحوصات القيمة الفارغة في كل قالب عرض لتجنب الأخطاء | إلحاق دالة withDefault بتعريف علاقة belongsTo العكسية |
| حفظ السجلات الأبناء | دمج رقم معرف الأب يدوياً داخل مصفوفة البيانات قبل الحفظ | استدعاء دالة create مباشرة عبر علاقة النموذج الأب |
$authorName = $post->user->name;
$recentCount = $user->posts()
->where('created_at', '>=', now()->subWeek())
->count();
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
أتقنت في هذا الدرس حول «علاقتا واحد لواحد وواحد لمتعدد في نماذج Eloquent» مفاهيم علاقة واحد لواحد بدالة HasOne، والعلاقة العكسية بدالة BelongsTo، وعلاقة واحد لمتعدد بدالة HasMany وفق معايير Laravel 12 الحديثة.
الخطوة التالية والدرس القادم
انتقل الآن إلى الدرس التالي «علاقة متعدد لمتعدد والجداول الوسيطة Pivot في Eloquent» للبناء التراكمي على ما تعلمته.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 HasMany Relations علاقة لمتعدد
- تمثيل علاقتي واحد لواحد وواحد لمتعدد بين نماذج Eloquent باستخدام دوال hasOne و hasMany والعلاقة العكسية belongsTo.
- للمراجعة
- 02 One to One With HasOne علاقة واحد لواحد بدالة HasOne
- المفهوم الهندسي والتطبيق العملي المباشر لقسم علاقة واحد لواحد بدالة HasOne في إطار العمل Laravel 12.
- للمراجعة
- 03 Inverse Relations With BelongsTo العلاقة العكسية بدالة BelongsTo
- المفهوم الهندسي والتطبيق العملي المباشر لقسم العلاقة العكسية بدالة BelongsTo في إطار العمل Laravel 12.
- للمراجعة
- 04 One to Many With HasMany علاقة واحد لمتعدد بدالة HasMany
- المفهوم الهندسي والتطبيق العملي المباشر لقسم علاقة واحد لمتعدد بدالة HasMany في إطار العمل Laravel 12.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 MVC MVC
- Model View Controller
- النمط المعماري الذي يفصل بين نماذج البيانات Models، وطبقات العرض Views، والمتحكمات Controllers في Laravel.
- للمراجعة
- 02 CLI CLI
- Command Line Interface
- واجهة سطر الأوامر التي تعمل عبر أداة php artisan لتوليد الملفات وإدارة التطبيق.
- للمراجعة
- 03 HTTP HTTP
- Hypertext Transfer Protocol
- بروتوكول نقل النص الفائق الذي ينظم طلبات المتصفح واستجابات خادم Laravel.
- للمراجعة
- 04 PSR PSR
- PHP Standards Recommendations
- المعايير القياسية للغة PHP مثل التحميل التلقائي PSR-4 التي يلتزم بها إطار العمل Laravel.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
اكتب ونفّذ المثال البرمجي المشروح في قسم «علاقة واحد لواحد بدالة HasOne» داخل مشروع Laravel 12 المحلي وتحقق من النتيجة.
-
بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم «العلاقة العكسية بدالة BelongsTo» وقارن مخرجات التنفيذ.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
ما الهدف الهندسي الأساسي من علاقة واحد لواحد بدالة HasOne في إطار العمل Laravel 12؟
يسهم علاقة واحد لواحد بدالة HasOne في تنظيم منطق التطبيق بأسلوب معياري آمن وقابل للصيانة في Laravel 12.
يساعد الالتزام باصطلاحات Laravel 12 الرسمية في قسم «العلاقة العكسية بدالة BelongsTo» على رفع جودة الكود وسهولة اختباره آلياً.
صواب؛ الالتزام بالمعايير القياسية في Laravel 12 يجعل الكود واضحاً وسهل الفحص والصيانة.
أي آلية في Laravel 12 تتولى إدارة علاقة واحد لمتعدد بدالة HasMany بشكل مباشر ومنظم؟
توفر طبقة إطار العمل وحاوية الخدمات في Laravel 12 الأدوات القياسية لإدارة علاقة واحد لمتعدد بدالة HasMany.
لماذا يُعد تطبيق الخصائص الديناميكية ودوال العلاقة مهماً عند بناء تطبيقات Laravel 12 جاهزة للإنتاج؟
لأنه يمنع الأخطاء البرمجية الخفية ويوحد سلوك التطبيق بين بيئتي التطوير والإنتاج.
في Laravel 12، يُنصح بكتابة مفاتيح الإنتاج السرية مباشرة داخل ملفات الكود المصدري المرفوعة إلى Git بدلاً من ملفات البيئة.
خطأ؛ يجب حفظ المفاتيح والبيانات السرية في متغيرات البيئة وعدم رفعها أبداً إلى مستودع Git.
ما المزايا الهندسية التي يحققها تطبيق إنشاء السجلات المرتبطة تلقائيا في Laravel 12؟ (اختر كل ما ينطبق)
يوفر فصلاً واضحاً للمسؤوليات، وأماناً أعلى أثناء التنفيذ، وتعاوناً أسهل بين أفراد الفريق.
يوظف إطار العمل Laravel 12 ميزات PHP 8 الحديثة مثل تحديد أنواع القيم المرجعة لجعل الكود أكثر وضوحاً وأماناً.
صواب؛ يعتمد Laravel 12 بشكل كامل على الصياغة الحديثة للغة PHP 8.2+ وسلامة الأنواع.
ما الفرق الجوهري بين معيار Laravel 12 الحديث والملفات اليدوية التقليدية في ملخص علاقات الواحد والمتعدد؟
يوفر Laravel 12 واجهات قياسية موحدة وحماية مدمجة تغني عن الكود اليدوي المعرض للأخطاء.