Mysql
 sql >> база данни >  >> RDS >> Mysql

Изграждане на трикомпонентна връзка с помощта на Laravel Eloquent Relationships

По принцип вашите четири таблици ще бъдат нещо като:

служител

  • идентификатор
  • ...вашите полета

проект

  • идентификатор
  • ...вашите полета

работи

  • идентификатор
  • ...вашите полета

проект_служител

  • employee_id
  • идентификатор на_проекта
  • employment_id

Можете да разделите проблема на отношения 2 по 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')
  }
}

Модел на проект

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

Модел на заетост

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

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

В този момент във вашия контролер можете да управлявате връзката си, например, ако искате да добавите към $employee, проекта с идентификатор 1 със заетостта с id 2, можете просто

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

Надявам се този отговор на вашия въпрос.

Ако имате нужда от времеви отпечатъци във вашата основна таблица, добавете ->withTimesetamps() към вашите връзки.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL група по дата, но получавайте и дати без записи

  2. Най-бързият начин за повторение през голяма таблица с помощта на JDBC

  3. PHP + MySql + Съхранени процедури, как да получа достъп до изходяща стойност?

  4. Формат на датата на MySQL – това, което трябва да знаете

  5. Как да получите следващата предстояща дата от маса?