Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Aufbau einer ternären Beziehung mit Laravel Eloquent Relationships

Grundsätzlich sehen Ihre vier Tabellen so aus:

Mitarbeiter

  • Kennung
  • ...Ihre Felder

Projekt

  • Kennung
  • ...Ihre Felder

Beschäftigungen

  • Kennung
  • ...Ihre Felder

employee_project

  • employee_id
  • Projekt_ID
  • beschäftigungs_id

Sie können das Problem in 2-mal-2-Beziehungen aufteilen:

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')
  }
}

Ein Projektmodell

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')
  }
}

Ein Beschäftigungsmodell

class Employment extends Model{
  public function employees(){
    return $this->belongsToMany("Employee")
  }

  public function projects(){
    return $this->belongsToMany("Project")
  }
}

An dieser Stelle in Ihrem Controller können Sie Ihre Beziehung verwalten, wenn Sie zum Beispiel zu $Mitarbeiter das Projekt mit der ID 1 mit der Beschäftigung mit der ID 2 hinzufügen möchten, können Sie einfach

$employee->projects()->attach([1 => ['employment_id' => '2']]);

Ich hoffe, diese Antwort auf Ihre Frage.

Wenn Sie Zeitstempel in Ihrer Pivot-Tabelle benötigen, fügen Sie ->withTimesetamps() zu Ihren Beziehungen hinzu.