اذهب إلى المحتوى

السؤال

نشر

السلام عليكم.

اواجه مشكلة صعبة جدا في فهم العلاقات بلارافل. حاولت كثيرا وجاهدا ولم افهم اي شئ بها او افهمها ولكن لا اجيد توظيف ما تعلمته..

عندي حاليا جدول articles به title, body, category_id... الخ

العامود category_id يحتوي على id الcategory الخاصة بالarticle.

فكيف سأجلب إسم الcategory من جدول categories عن طريق قيمة ال category_id الموجودة بداخل صف المقالة..

Recommended Posts

  • 0
نشر

الأمر سهل لا تقلق ولكن يحتاج للمزيد من الجهد والمزيد من التدريبات لكي نفهم جيدا كيفية عمل العلاقات في لارافيل, لنحاول التفكير بشكل منطقي في المشكلة التي تواجهك, لدينا قسم أو category وهذا القسم يحتوي على العديد من المقالات, اذا بامكان القسم ان يمتلك أكثر من مقال, بينما المقالة لا يمكنها الانتماء الا لقسم واحد, اذا نوع العلاقة واحد إلى كثير One to Many, فبالتالي شكل العلاقات سيكون كالتالي
في النموذج Category

	public function articles(){
         return $this->hasMany(Article::class);
     }

استخدمت التابع hasMany أي أن القسم يمتلك أكثر من مقالة
في النموذج Article 

 	public function category(){
         return $this->belongsTo(Category::class);
     }

استخدمت التابع belongsTo أي أن المقالة تنتمي لقسم واحد
الآن لو حاولنا الحصول على معلومات الالقسم الذي تنتمي اليه المقالة فسوف يكون كذلك

return $category=Article::find(1)->category()->get();

الآن هذا السطر سوف يقوم بارجاع بيانات القسم الذي تنتمي اليه المقالة, ويمكننا الوصول لاسم القسم بكل سهولة من خلال السطر التالي

return $category[0]->name;

سوف يتم استرجاع اسم القسم
يمكنك قراءة المزيد عن العلاقات من هنا

  • 0
نشر

الأمر بسيط جداً فإذا نظرنا إليه بعيداً عن الكود فسنجد أن كل مقال ينتمي إلى قسم معين و من جهة معاكسة كل قسم يملك عدة مقالات و على هذا الأساس نقوم بإنشاء العلاقات ففي النموذج Category نضع:

public function articles()
{
  return $this->hasMany(Article::class);
}

و في الجهة المُعاكسة في النموذج Article:

public function category()
{
  return $this->belongsTo(Category::class);
}

بما أن حقل المفتاح الثانوي يتبع عُرف التسمية فلا داعي لتحديده كمعامل في تعريف العلاقة.

الآن إذا كان لديك مثلاً مقال مُحدد و تريد الوصول إلى معلومات القسم الذي ينتمي له فالأمر بسيط جدًا ستقوم ب:

$article = Article::find(1);
$category = $article->category;
$categoryName = $category->name;

عندما نصل إلى العلاقة كخاصية فإننا نريد جلب السجل بكافة معلوماته.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...