sql >> Base de Datos >  >> RDS >> Mysql

Construyendo una relación ternaria usando Laravel Eloquent Relations

Básicamente, sus cuatro tablas serán algo así como:

empleado

  • identificación
  • ...sus campos

proyecto

  • identificación
  • ...sus campos

empleos

  • identificación
  • ...sus campos

empleado_proyecto

  • id_de_empleado
  • id_del_proyecto
  • id_empleo

Puedes dividir el problema en relaciones de 2 por 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 modelo de proyecto

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 modelo de Empleo

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

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

En este punto, en su controlador, puede administrar su relación, por ejemplo, si desea agregar a $ empleado, el proyecto con id 1 con el empleo con id 2, simplemente puede

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

Espero esta respuesta a tu pregunta.

Si necesita marcas de tiempo en su tabla dinámica, agregue ->withTimesetamps() a sus relaciones.