Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Construindo relacionamentos ternários usando Laravel Eloquent Relationships


Basicamente suas quatro tabelas serão algo como:

funcionário
  • código
  • ...seus campos

projeto
  • código
  • ...seus campos

empregos
  • código
  • ...seus campos

employee_project
  • employee_id
  • id_projeto
  • employment_id

Você pode dividir o problema em 2 por 2 relações:
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')
  }
}

Um modelo de projeto
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')
  }
}

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

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

Neste ponto em seu controller você pode gerenciar sua relação, por exemplo se você quiser adicionar a $employee, o projeto com id 1 com o job com id 2 você pode simplesmente
$employee->projects()->attach([1 => ['employment_id' => '2']]);

Espero que esta resposta à sua pergunta.

Se você precisar de timestamps em sua tabela dinâmica, adicione ->withTimesetamps() aos seus relacionamentos.