Laravel Relationship Pivot table множественные отношения - PullRequest
0 голосов
/ 03 октября 2019

Привет надо как-то получить связь между этими моделями

1) Модель автосервиса

2) Мастер-модель

3) Сервисная модель

здесьструктура моей сводной таблицы

id, auto_service_id, master_id, service_id

Теперь мне нужно получить Для каждого автосервиса свои Мастера и предоставляемые ими Услуги.

Один Мастер может принадлежать ко многим Автоуслугам и предоставлять разные Услуги в каждом из них. ,

Один и тот же сервис может быть предоставлен несколькими мастерами в одном и том же автосервисе.

Как построить отношения между этими моделями?

1 Ответ

0 голосов
/ 03 октября 2019

У вас должна быть одна сводная таблица autoservice_service.

В ваших сервисных моделях

public function autoServices(){
  $this->belongsToMany('App\AutoService');
}

В вашей мастер-модели

public function autoServices(){
  $this->hasMany('App\AutoService');
}

В вашей модели автосервиса

public function services(){
  $this->belongsToMany('App\Service');
}
public function masters(){
  $this->belongsTo('App\Master');
}

в сводных таблицах используйте затем service_id, master_id, autoservice_id. Если вы хотите использовать метки времени, используйте метод withTimestamps() (например, $this->belongsToMany('App\Master')->withTimestamps();

РЕДАКТИРОВАТЬ: если вы хотите установить связь между Мастером и Сервисом, в которой один Мастер может иметь несколько сервисов и наоборот, вы должны сделатьдругая сводная таблица master_service. В Service модели:

public function masters(){
   return $this->belongsToMany('App\Master');
}

и в Master модели:

public function services(){
   return $this->belongsToMany('App\Service');
}

теперь вы можете проверить, что делает мастер, примеры

1) Services of master
App\Master::find($id)->services();
2) Which masters do service
App\Service::find($id)->masters();

Другим обходным решением является добавление еще одного внешнего ключа в сводную таблицу, а затем использование ->withPivot('column1', 'column2').

.
...