Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Budowanie trójskładnikowej relacji za pomocą Laravel Eloquent Relationships

Zasadniczo twoje cztery stoły będą wyglądały mniej więcej tak:

pracownik

  • identyfikator
  • ...Twoje pola

projekt

  • identyfikator
  • ...Twoje pola

zatrudnienia

  • identyfikator
  • ...Twoje pola

employee_project

  • identyfikator_pracownika
  • identyfikator projektu
  • identyfikator zatrudnienia

Możesz podzielić problem na 2 przez 2 relacje:

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

Model projektu

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

Model zatrudnienia

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

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

W tym momencie w kontrolerze możesz zarządzać swoją relacją, na przykład jeśli chcesz dodać do $pracownika projekt o id 1 z zatrudnieniem o id 2, możesz po prostu

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

Mam nadzieję, że ta odpowiedź na Twoje pytanie.

Jeśli potrzebujesz znaczników czasu w tabeli przestawnej, dodaj ->withTimesetamps() do swoich relacji.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Potrzebuję pomocy w ukończeniu tego 3-poziomowego dynamicznego menu rozwijanego

  2. Jak działa memcache z MySQL?

  3. Kursor MySql - Tworzenie procedury

  4. Jak rozwiązać problem odmowy dostępu dla użytkownika „root”@”localhost” (przy użyciu hasła:tak) podczas łączenia bazy danych MySQL

  5. R- Znaki specjalne nie są wstawiane w mysql