En gros, vos quatre tables ressembleront à :
employé
- identifiant
- ...vos champs
projet
- identifiant
- ...vos champs
emplois
- identifiant
- ...vos champs
employé_projet
- id_employé
- id_projet
- id_emploi
Vous pouvez diviser le problème en relations 2 par 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 modèle de projet
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 modèle d'emploi
class Employment extends Model{
public function employees(){
return $this->belongsToMany("Employee")
}
public function projects(){
return $this->belongsToMany("Project")
}
}
A ce stade dans votre contrôleur vous pouvez gérer votre relation, par exemple si vous voulez ajouter à $employee, le projet avec l'id 1 avec l'emploi avec l'id 2 vous pouvez simplement
$employee->projects()->attach([1 => ['employment_id' => '2']]);
J'espère que cette réponse à votre question.
Si vous avez besoin d'horodatages dans votre tableau croisé dynamique, ajoutez ->withTimesetamps() à vos relations.