sql >> Databasteknik >  >> RDS >> Mysql

Bygga ternära relationer med hjälp av Laravel Eloquent Relationships

Dina fyra bord kommer i princip att vara något i stil med:

anställd

  • id
  • ...dina fält

projekt

  • id
  • ...dina fält

anställningar

  • id
  • ...dina fält

employee_project

  • employee_id
  • projekt-id
  • anställnings-id

Du kan dela problemet i 2 gånger 2 relationer:

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

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

En anställningsmodell

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

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

Vid denna punkt i din controller kan du hantera din relation, till exempel om du vill lägga till $employee, projektet med id 1 med anställningen med id 2 kan du helt enkelt

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

Jag hoppas att detta svar på din fråga.

Om du behöver tidsstämplar i din pivottabell, lägg till ->withTimesetamps() till dina relationer.



  1. Juli 2016 PSU misslyckas med att göra isqora

  2. MySQL JOIN Missbruk? Hur illa kan det bli?

  3. Hibernate kodar fel medan kvarstående objekt [UTF-8]

  4. Unserialize genom fråga på databasnivå själv