Básicamente, sus cuatro tablas serán algo así como:
empleado
- identificación
- ...sus campos
proyecto
- identificación
- ...sus campos
empleos
- identificación
- ...sus campos
empleado_proyecto
- id_de_empleado
- id_del_proyecto
- id_empleo
Puedes dividir el problema en relaciones de 2 por 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 modelo de proyecto
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 modelo de Empleo
class Employment extends Model{
public function employees(){
return $this->belongsToMany("Employee")
}
public function projects(){
return $this->belongsToMany("Project")
}
}
En este punto, en su controlador, puede administrar su relación, por ejemplo, si desea agregar a $ empleado, el proyecto con id 1 con el empleo con id 2, simplemente puede
$employee->projects()->attach([1 => ['employment_id' => '2']]);
Espero esta respuesta a tu pregunta.
Si necesita marcas de tiempo en su tabla dinámica, agregue ->withTimesetamps() a sus relaciones.