Mysql
 sql >> Database >  >> RDS >> Mysql

Costruire relazioni ternarie usando Laravel Eloquent Relationships

Fondamentalmente i tuoi quattro tavoli saranno qualcosa come:

dipendente

  • id
  • ...i tuoi campi

progetto

  • id
  • ...i tuoi campi

occupazioni

  • id
  • ...i tuoi campi

progetto_dipendente

  • id_dipendente
  • ID_progetto
  • employment_id

Puoi dividere il problema in relazioni 2 per 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 modello di progetto

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 modello di occupazione

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

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

A questo punto nel tuo controller puoi gestire la tua relazione, ad esempio se vuoi aggiungere a $employee, il progetto con id 1 con l'occupazione con id 2 puoi semplicemente

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

Spero che questa risposta alla tua domanda.

Se hai bisogno di timestamp nella tua tabella pivot, aggiungi ->withTimesetamps() alle tue relazioni.