Fondamentalmente i tuoi quattro tavoli saranno qualcosa come:
dipendente
- id
- ...i tuoi campi
progetto
- id
- ...i tuoi campi
occupazioni
- id
- ...i tuoi campi
progetto_dipendente
- id_dipendente
- ID_progetto
- employment_id
Puoi dividere il problema in relazioni 2 per 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')
}
}
Un modello di progetto
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')
}
}
Un modello di occupazione
class Employment extends Model{
public function employees(){
return $this->belongsToMany("Employee")
}
public function projects(){
return $this->belongsToMany("Project")
}
}
A questo punto nel tuo controller puoi gestire la tua relazione, ad esempio se vuoi aggiungere a $employee, il progetto con id 1 con l'occupazione con id 2 puoi semplicemente
$employee->projects()->attach([1 => ['employment_id' => '2']]);
Spero che questa risposta alla tua domanda.
Se hai bisogno di timestamp nella tua tabella pivot, aggiungi ->withTimesetamps() alle tue relazioni.