Ваше отношение «многие ко многим» между User
и Role
может быть прекрасно описано с помощью belongsToMany
Методы красноречивых отношений в обоих направлениях.Кроме того, поскольку у каждого Order
должен быть ответственный менеджер, у нас также есть отношение один-ко-многим между Manager
и Order
, которое будет описано с помощью hasMany
/ belongsTo
методов.
Так, ваша User
модель будет иметь:
public function roles()
{
return $this->belongsToMany('App\Role');
}
public function orders()
{
return $this->hasMany('App\Order');
}
Для вашей Role
модели:
public function users()
{
return $this->belongsToMany('App\User');
}
И, наконец, ваша Order
модель:
public function manager()
{
return $this->belongsTo('App\User');
}
Нет необходимости создавать определенные ограничения (например, «только пользователи с диспетчером ролей могут иметь заказы») на уровне схемы БД, это легче реализовать в коде.Так, например, вы можете захотеть реализовать метод, который будет назначать заказ пользователю и сначала проверять его роли.