Отношения Laravel ORM - менеджер-сотрудник за одной и той же таблицей пользователей - PullRequest
0 голосов
/ 15 мая 2018

У меня есть сводная таблица user_managers, которая получает оба ключа из таблицы пользователей:

  • employer_user_id
  • employee_user_id

Я полагаю, что пользователи будут иметь отношение многие ко многим , так как пользователь может управляться более чем одним менеджером, будут пользователи, которые управляют 1 или более пользователями, в то время как другие пользователи (исключая тех, кто находится под ними) будет управлять ими, в то время как будут пользователи, которые вообще не будут управлять, а у User может быть только 1 менеджер.

Моя первая попытка определить это состояла в том, чтобы создать другую модель с именем Manager, представляющую сводную таблицу user_managers, поэтому в модели User я написал следующие 2 функции:

public function managedBy()
{
    return $this->belongsToMany('Manager', 'employer_user_id');
}

public function manages()
{
    return $this->hasMany('Manager', 'employee_user_id', 'employer_user_id');
}

Имеет ли это смысл или вам известен лучший способ реализации такой структуры?

1 Ответ

0 голосов
/ 15 мая 2018

Если пользователь может иметь только 1 менеджера , тогда вы можете определить свои отношения как один ко многим, например

//User model 

public function managedBy()
{
    return $this->belongsTo(User::class, 'manager_id');
}

public function managees()
{
    return $this->hasMany(User::class, 'manager_id');
}

, вам не нужно передавать $id в ваши отношенияопределение.

Для нескольких менеджеров, Да, вам нужно было бы установить отношение многие ко многим, добавив таблицу соединений / разворот, которая, я думаю, у вас уже есть user_managers, Теперь вам нужно определить свои отношения, используя belongsToMany дляменеджеры и менеджеры, такие как

public function managers()
{
    $this->belongsToMany(User::class, 'user_managers', 'employer_user_id')
}

public function managees()
{
    $this->belongsToMany(User::class, 'user_managers', 'employee_user_id')
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...