Laravel: отношения за одним столом - PullRequest
0 голосов
/ 23 октября 2018

В моем приложении у меня есть таблица users, в этой таблице есть поле с именем managedByUsername, которое является именем пользователя этого конкретного менеджера пользователя.

Чтобы получить своих сотрудников специально, вы можете выполнитьзапросите следующее:

$employees = User::where('managedByUsername', auth()->user->username)->get()

Чтобы получить своего менеджера, в модели User вы могли бы иметь отношение;

public function mananager()
{
    return $this->belongsTo(User::class, 'username', 'managedByUsername');
}

Однако я не могу думатькак бы вы сделали это наоборот?

Возможно

public function employees()
{
    return $this->hasMany(User::class, 'username', 'managedByUsername');
}

Но это, очевидно, не сработает.

Я также попробовал следующее:

/**
 * Get the manager for this user
 *
 * @return void
 */
public function mananager()
{
    return $this->belongsTo(User::class, 'managedByUsername', 'username');
}

/**
 * Get the manager for this user
 *
 * @return void
 */
public function employees()
{
    return $this->hasMany(User::class, 'managedByUsername', 'username');
}

1 Ответ

0 голосов
/ 23 октября 2018

Лучший способ решить эту проблему - использовать идентификатор пользователя в качестве внешнего ключа для менеджера.

Поэтому замените поле managedByUsername на manager_id.

ТогдаВы можете написать свои отношения Eloquent как:

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

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

Надеюсь, это поможет решить вашу проблему.

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