Мне нужен совет о моих модельных отношениях,
Logi c
Group
много users
Group
много admins
User
имеет много groups
(как пользователь) User
имеет много groups
(как администратор)
Структура базы данных
- Таблица групп
- Таблица пользователей
- Таблица Group_Users (сохранить идентификатор пользователя и идентификатор группы)
- Таблица Group_Admins (сохранить идентификатор пользователя и id группы)
Код отношения
User model
public function groupsUser() {
return $this->hasMany(GroupUser::class);
}
public function groupsAdmin() {
return $this->hasMany(GroupAdmin::class);
}
Group model
public function users() {
return $this->hasMany(GroupUser::class);
}
public function admins() {
return $this->hasMany(GroupAdmin::class);
}
GroupUser model
public function group() {
return $this->belongsTo(Group::class);
}
public function user() {
return $this->belongsTo(User::class);
}
GroupAdmin model
public function group() {
return $this->belongsTo(Group::class);
}
public function user() {
return $this->belongsTo(User::class);
}
Требуется помощь
Как правило, отношения между users
и groups
равны многие ко многим обычно Мне не нужны модели GroupUser
и GroupAdmin
, а затем просто использовать функцию sync()
для добавления / удаления пользователей и идентификаторов групп из этих таблиц.
Что меня беспокоит тогда ?
Обычно я использую этот тип подключения, когда мне нужен объемный ввод идентификаторов в базу данных (скажем, добавление тегов к сообщениям, внезапное связывание идентификаторов 10 тегов с 1 сообщением) в этот момент с использованием sync()
и удалением моделей GroupUser
и GroupAdmin
имеет смысл, но в моем случае, когда пользователи присоединяются / добавляют в группы один по одному, что вы предлагаете для этих отношений?
- Имеет ли мой текущий подход смысл?
- Лучше, если я удалю эти
GroupUser
и GroupAdmin
моделей и добавьте их в user, group
модели, например:
public function users()
{
return $this->hasMany(User::class, 'group_users', 'user_id', 'id');
}
и так далее?
Как вы думаете, что лучше всего?