По принцип вашите четири таблици ще бъдат нещо като:
служител
- идентификатор
- ...вашите полета
проект
- идентификатор
- ...вашите полета
работи
- идентификатор
- ...вашите полета
проект_служител
- employee_id
- идентификатор на_проекта
- employment_id
Можете да разделите проблема на отношения 2 по 2:
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')
}
}
Модел на проект
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')
}
}
Модел на заетост
class Employment extends Model{
public function employees(){
return $this->belongsToMany("Employee")
}
public function projects(){
return $this->belongsToMany("Project")
}
}
В този момент във вашия контролер можете да управлявате връзката си, например, ако искате да добавите към $employee, проекта с идентификатор 1 със заетостта с id 2, можете просто
$employee->projects()->attach([1 => ['employment_id' => '2']]);
Надявам се този отговор на вашия въпрос.
Ако имате нужда от времеви отпечатъци във вашата основна таблица, добавете ->withTimesetamps() към вашите връзки.