Laravel 6 отношения многие ко многим

В laravel 6 у меня есть 2 модели

class Teacher {

}

class Students {

}

У меня есть третья модель для объединения таблиц

class TeacherStudent {

}

Теперь, как я могу получить всех учителей, на которых не подписан конкретный ученик?

Например:
Учитель 1, Учитель 2, Учитель 3, Учитель 4 находятся в таблице Учитель
, а ученик 1, ученик 2, ученик 3, ученик 4 находятся в таблице >Студенческий стол

Учащийся1 подписался на Учитель1, Учитель2
Ученик2 подписался на Учитель1, Учитель4
Ученик3 подписался на Учитель2

Здесь, как 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