Zasadniczo twoje cztery stoły będą wyglądały mniej więcej tak:
pracownik
- identyfikator
- ...Twoje pola
projekt
- identyfikator
- ...Twoje pola
zatrudnienia
- identyfikator
- ...Twoje pola
employee_project
- identyfikator_pracownika
- identyfikator projektu
- identyfikator zatrudnienia
Możesz podzielić problem na 2 przez 2 relacje:
class Employee extends Model{
public function projects(){
return $this->belongsToMany("Project")
}
// Second relation is Optional in this case
public function employments(){
return $this->belongsToMany("Employment", 'employee_project')
}
}
Model projektu
class Project extends Model{
public function employees(){
return $this->belongsToMany("Employee")
}
// Second relation is Optional in this case
public function employments(){
return $this->belongsToMany("Employment",'employee_project')
}
}
Model zatrudnienia
class Employment extends Model{
public function employees(){
return $this->belongsToMany("Employee")
}
public function projects(){
return $this->belongsToMany("Project")
}
}
W tym momencie w kontrolerze możesz zarządzać swoją relacją, na przykład jeśli chcesz dodać do $pracownika projekt o id 1 z zatrudnieniem o id 2, możesz po prostu
$employee->projects()->attach([1 => ['employment_id' => '2']]);
Mam nadzieję, że ta odpowiedź na Twoje pytanie.
Jeśli potrzebujesz znaczników czasu w tabeli przestawnej, dodaj ->withTimesetamps() do swoich relacji.