Laravel 6 отношения многие ко многим - PullRequest
0 голосов
/ 29 февраля 2020

В 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

Здесь, когда вы вошли как Студент1 , когда я хочу увидеть отписавшихся учителей, я должен получить Учитель3 и Учитель4 войдя в систему как Student4 , когда я хочу увидеть отписавшихся учителей, я должен получить всех учителей и т. д.

1 Ответ

1 голос
/ 29 февраля 2020

Я предполагаю, что вы определили все отношения в ваших моделях

// 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: ничего из этого не проверял, дайте мне знать, если они не работают

...