Laravel 6 hubungan banyak ke banyak

Di laravel 6, saya punya 2 model

class Teacher {

}

class Students {

}

Saya memiliki model ketiga untuk bergabung dengan tabel

class TeacherStudent {

}

Sekarang bagaimana saya bisa mendapatkan semua guru yang tidak berlangganan oleh siswa tertentu?

Misalnya:
Guru1, Guru2, Guru3, Guru4 ada di tabel Guru
dan Siswa1, Siswa2, Siswa3, Siswa4 ada di Siswa

Siswa1 berlangganan Guru1, Guru2
Siswa2 berlangganan Guru1, Guru4
Siswa3 berlangganan Guru2

Di sini, dengan login sebagai Siswa1 ketika saya ingin melihat guru yang tidak berlangganan, saya harus mendapatkan Guru3 dan Guru4
dengan login sebagai Siswa4 ketika Saya ingin melihat guru yang tidak berlangganan, saya harus mendapatkan semua guru dan seterusnya


person Akas    schedule 29.02.2020    source sumber


Jawaban (1)


Saya berasumsi Anda telah mendefinisikan semua relasi dalam model Anda

// 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);
});

Kueri di atas akan mengambil semua guru yang bukan milik pengguna terotentikasi saat ini.

Jika Anda belum mendefinisikan relasi apa pun dalam model Anda. Mereka akan terlihat seperti ini:

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

Sebuah model siswa:

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

PS: belum menguji semua itu, beri tahu saya jika tidak berhasil

person Sumit Wadhwa    schedule 29.02.2020