• 0

كيفية عمل شرط عن طريق علاقة one to many في لارافيل

سلام عليكم.

اريد اعمل جلب للبيانات من جدول exams_enter_attemps

هذا الجدول يتكون من حقل يدعى student_id وهو foreign key من جدول students. 

جدول students يحتوي على حقل level.

 

اريد جلب exams_enter_attemps للطلاب اللذين لهم level=1 فكيف افعلها؟

يعني كتخيل بسيط باللغة الإنجليزية 

select exams_enter_attemps when student level=1.

استخدم لارافل ٨

وشكرا جزيلا

تمّ تعديل بواسطة محمود رضا موسى
اسم التقنية المستخدمة

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

بإمكانك إستخدام التابع whereHas لتحقيق ما تريد. سأعطيك مثالاً لتقريب الفهم لنفترض أنه لدي نموذج Module و نموذج Permission حيث أن كل Permission ينتمي إلى Module و العلاقة في النموذج Permission بالشكل التالي:

public function module()
{
  return $this->belongsTo(Module::class);
}

نريد جلب كافة الpermissions التي يكون الmodule الخاص بها مُفعل حيث يوجد حقل في جدول modules إسمه active يأخذ القيمة 0 أو 1 لذلك بالإمكان إستخدام whereHas بالشكل التالي:

<?php

$permissions = Permission::whereHas('module', function($q) { 
  $q->where('active', 1); 
})->get();

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

المثال الذي طرحته يُشبه تماماً ما تريد فقط تأكد من إنشائك للعلاقة student بشكل سليم .

2 اشخاص أعجبوا بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

هل يمكنك إرفاق شيفرات النماذج models الخاصة بكلا الجدولين؟ 

بشكل عام، علينا عمل join بين الجدولين (على المفتاح الأجنبيي student_id) لتكون عبارة SQL هكذا:

select 
	exams_enter_attemps 
    
from exams_enter_attemps e join student s on student_id

	when s.level=1

وستكون العلاقة تقريبا هكذا:

DB::table("exams_enter_attemps e")
->join("student s", function($join){
	$join->on("student_id", "when", "s.level");
})
->select("exams_enter_attemps")
->get();

الشكل العام للعلاقة الخاصة بالربط JOIN:

use Illuminate\Support\Facades\DB;

$users = DB::table('users')
            ->join('contacts', 'users.id', '=', 'contacts.user_id')
            ->join('orders', 'users.id', '=', 'orders.user_id')
            ->select('users.*', 'contacts.phone', 'orders.price')
            ->get();

يمكنك تصفح التوثيق من هنا: laravel 8 queries#joins

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن