Вы ищете полиморфные отношения:
https://laravel.com/docs/5.6/eloquent-relationships#polymorphic-relations
Вы хотите настроить ваших работников с двумя столбцами вместо одного типа, давайте назовем это отношение workplace
. Ваша таблица workers
будет иметь столбцы workplace_id
и workplace_type
. Столбцы типа содержат класс связанной модели (т. Е. App/Company
), а столбец идентификатора содержит идентификатор связанной модели, поэтому работник может быть связан либо с компанией, либо с филиалом компании.
Ваши модели будут выглядеть примерно так:
class Worker extends Model
{
public function workplace()
{
return $this->morphTo();
}
}
class Company extends Model
{
public function workers()
{
return $this->morphMany('App\Worker', 'workplace');
}
}
class Branch extends Model
{
public function workers()
{
return $this->morphMany('App\Worker', 'workplace');
}
}