Сложные отношения с Eloquent / Laravel - PullRequest
1 голос
/ 26 июня 2019

Та же история, что и у многих других вопросов на этом сайте: я несколько часов подряд стучал головой об стену, пытаясь выяснить эти отношения.

У меня есть 3 модели, где отношения должны работать так:

Модель: Пользователь
Пользователь может принадлежать ко многим школам.
Пользователь принадлежит одной «Роли» отдельно в каждой школе.
Пользователь может быть активирован / деактивирован отдельно в каждой школе.

Модель: Школа .
Школа может принадлежать многим пользователям

Модель: Роль .
Роли будут «Стандарт» или «Администратор».

У меня есть сводная таблица, которая связывает пользователей и школы. В сводной таблице я также экспериментировал с добавлением столбцов 'role_id' и 'is_activation' - что, я сомневаюсь, является правильным способом сделать это?


Я хочу получить доступ к таким данным:

Пользователь
Получить школы, принадлежащие пользователю.
Получить роль для текущей школы.
Получить активированный / деактивированный статус для текущей школы.

школа
Получить всех пользователей, принадлежащих к школе.
Получить роль для каждого пользователя.
Получить активированный / деактивированный статус для каждого пользователя.


Я бы решил это, если бы пользователи могли принадлежать только к одной школе каждая, но, поскольку один и тот же пользователь может принадлежать к нескольким школам, для меня это было слишком сложно.

Какие отношения я должен применять к каждой модели?

Я был бы очень признателен, если бы кто-нибудь указал мне правильное направление здесь. Спасибо!

1 Ответ

0 голосов
/ 26 июня 2019

Вы можете иметь отношение many-to-many между user и school.Для этого потребуется сводная таблица между ними для хранения идентификаторов двух моделей.В конце концов ваши отношения с пользовательской точки зрения в конечном итоге будут:

public function schools() {
  return $this->belongsToMany('App\Models\School', 'pivot_table', 'user_id', 'school_id');
}

Вы можете взглянуть на документы laravel на «Многие ко многим»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...