A User
в моем приложении может выполнять одну из следующих ролей:
- Администратор
- Менеджер
- Продавец
A Manager
может иметь ноль или несколько salespersons
.
A Salesperson
может иметь ноль или один manager
.
У меня есть логика c, рассчитанная для Manager -> salespersons
:
Schema::create('manager_salespersons', function (Blueprint $table) {
$table->id();
$table->integer('manager_id'); // manager user->id
$table->integer('salesperson_id'); // salesperson user->id
});
И:
public function salespersons()
{
return $this->belongsToMany(User::class, 'manager_salespersons', 'manager_id', 'salesperson_id');
}
Это прекрасно работает с методом sync
: $user->salespersons()->sync($request->input('salespersons'));
Я изо всех сил пытаюсь понять, как правильно реализовать Salesperson -> manager
logi c. Вот что у меня есть:
public function manager()
{
return $this->belongsTo(User::class)->withDefault(['name' => 'N/A']);
}
Теперь это работает, только если у меня есть запись manager_id
в таблице users
, но я не хочу управлять отдельным вещь для этого. Я хочу получить manager
для Salesperson
через таблицу manager_salespersons
.
Как мне сделать это правильно? Я ищу что-то вроде belongsToOne
. Пример того, как синхронизировать c, также будет идеальным.
Должен ли я просто иметь отношение managers
, а затем отношение manager
, которое получает первый результат из managers
?