Laravel 6 ความสัมพันธ์แบบหลายต่อหลาย

ใน laravel 6 ฉันมี 2 รุ่น

class Teacher {

}

class Students {

}

ฉันมีรุ่นที่สามเพื่อเข้าร่วมตาราง

class TeacherStudent {

}

ตอนนี้ฉันจะรับครูทั้งหมดที่ไม่ได้สมัครเป็นสมาชิกโดยนักเรียนคนใดคนหนึ่งได้อย่างไร

ตัวอย่าง:
Teacher1, Teacher2, Teacher3, Teacher4 อยู่ในตาราง ครู
และ Student1, Student2, Student3, Student4 อยู่ใน >โต๊ะนักเรียน

Student1 สมัครสมาชิก Teacher1, Teacher2
Student2 สมัครสมาชิก Teacher1, Teacher4
Student3 สมัครสมาชิก Teacher2

ในที่นี้ เมื่อเข้าสู่ระบบด้วย Student1 เมื่อฉันต้องการเห็นครูที่ไม่ได้สมัครรับข้อมูล ฉันควรให้ Teacher3 และ Teacher4
เข้าสู่ระบบด้วย Student4 เมื่อ ฉันต้องการพบครูที่ไม่ได้สมัคร ฉันควรได้รับครูทุกคน และอื่นๆ


person Akas    schedule 29.02.2020    source แหล่งที่มา


คำตอบ (1)


ฉันสมมติว่าคุณได้กำหนดความสัมพันธ์ทั้งหมดในแบบจำลองของคุณแล้ว

// in your controller
$user = auth()->user();

// where 'students' is a many-to-many relationship you have in you Teacher model
$teachers = Teacher::whereDoesntHave('students', function($query) use($user) {
    return  $query
          ->where('user_id', $user->id);
});

ข้อความค้นหาข้างต้นจะดึงข้อมูลครูทั้งหมดที่ไม่ได้เป็นของผู้ใช้ที่ผ่านการรับรองความถูกต้องในปัจจุบัน

ในกรณีที่คุณไม่ได้กำหนดความสัมพันธ์ใด ๆ ในแบบจำลองของคุณ ควรมีลักษณะดังนี้:

// Teacher model
public function students() {
  // many to many relationship
  return $this->belongsToMany('App\Student', 'subscriber'); // replace subscribers with your pivot table
}

โมเดลนักเรียน:

// Student model
public function teachers() {
   // many to many relationship
   return $this->belongsToMany('App\Teacher', 'subscriber'); // replace subscribers with your pivot table
}

PS: ยังไม่ได้ทดสอบสิ่งใดเลย โปรดแจ้งให้เราทราบหากไม่ได้ผล

person Sumit Wadhwa    schedule 29.02.2020