Я бы тоже пошел на 4 таблицы как
- Пользователи
- роли
- компания
- user_role_company
Первые три таблицы сохранят обычные данные без удержания какого-либо внешнего ключа из других таблиц, 4 таблицы свяжут эти таблицы друг с другом со следующими атрибутами
- user_id
- role_id
- company_id
Теперь ваши дополнительные таблицы, которые являются пользователями, ролями и компаниями, будут определять отношение с user_role_company как hasMany
, а user_role_company
будет определять обратную связь с этими 3 таблицами как belongsTo
class User extends Model{
public function userRoleCompany()
{
return $this->hasMany('App\UserRoleCompany', 'user_id','id');
}
}
class Role extends Model{
public function userRoleCompany()
{
return $this->hasMany('App\UserRoleCompany', 'role_id','id');
}
}
class Company extends Model{
public function userRoleCompany()
{
return $this->hasMany('App\UserRoleCompany', 'company_id','id');
}
}
class UserRoleCompany extends Model{
public function user()
{
return $this->belongsTo('App\User', 'user_id');
}
public function role()
{
return $this->belongsTo('App\Role', 'role_id');
}
public function company()
{
return $this->belongsTo('App\Company', 'company_id');
}
}