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

السؤال

نشر (معدل)

سلام عليكم.

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

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

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

 

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

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

select exams_enter_attemps when student level=1.

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

وشكرا جزيلا

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

Recommended Posts

  • 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 بشكل سليم .

  • 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

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...