Mysql
 sql >> Base de données >  >> RDS >> Mysql

Construire une relation ternaire à l'aide de Laravel Eloquent Relationships

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.