라라벨 5 웅변가 다수 대 다수 2차 테이블
어떻게 풀어야 할지 모르는 질문이나 답을 찾기 위한 문구도 있어요.
다대다와 관련된 회사 모델과 사용자 모델이 있습니다.
user_pins 테이블을 원합니다.사용자는 여러 회사에 소속될 수 있으므로 각 회사 내에서 서로 다른 핀을 가질 수 있습니다.핀은 회사 내에서 고유하기 때문에 회사 내에서 두 명의 사용자가 동일한 핀을 가질 수 없습니다.다른 회사의 사용자도 같은 것을 가질 수 있습니다.
그래서 회사에서는 One to Many, 사용자에게는 One to Many이지만, 전체적으로 여러 가지입니다.그게 말이 되는지 잘 모르겠습니다.
테이블은 다음과 같이 세팅되어 있습니다.
Schema::create('user_pins', function (Blueprint $table) {
$table->integer('user_id')->unsigned();
$table->integer('company_id')->unsigned();
$table->string('pin');
$table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
$table->foreign('company_id')->references('id')->on('companies')->onUpdate('cascade')->onDelete('cascade');
$table->primary(['user_id', 'company_id', 'pin']);
});
이 테이블을 모델에 관련짓고 사용자와 회사를 모두 저장할 수 있도록 접근/작성/업데이트하기 위해 어떻게 해야 합니까?
일단 이름을 바꾸겠습니다.company_user
Laravel이 바로 사용할 수 있는 동일한 명명 규칙을 따르도록 합니다. (관계에서 피벗 테이블 이름을 지정할 수 있지만 계속 사용할 이유가 없다면 이 작업을 수행할 필요가 없습니다.user_pin
관례를 따르도록 한다:)
그런 다음 프라이머리 키를 3개 필드의 컴파운드에서 삭제하여company_id
그리고.user_id
.
마지막으로 PIN은 회사마다 고유해야 하기 때문에 두 개의 열에 고유 인덱스를 붙입니다.
Schema::create('company_user', function (Blueprint $table) {
$table->integer('company_id')->unsigned()->index();
$table->integer('user_id')->unsigned()->index();
$table->string('pin');
$table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
$table->foreign('company_id')->references('id')->on('companies')->onUpdate('cascade')->onDelete('cascade');
$table->primary(['company_id', 'user_id']);
$table->unique(['company_id', 'pin']);
});
그리고 모델에서의 관계에는 다음과 같은 것이 있습니다.
return $this->belongsToMany('App\Company')->withPivot('pin');
그리고.
return $this->belongsToMany('App\User')->withPivot('pin');
피벗과 함께 사용하는 예
회사의 모든 사용자 핀:
$company->users->lists('pivot.pin');
특정 회사의 사용자 핀
$user->companies()->where('id', $id)->get()->pivot->pin;
첫 번째 회사 관계에 대한 사용자 PIN:
$user->companies->first()->pivot->pin;
이게 도움이 됐으면 좋겠네요!
언급URL : https://stackoverflow.com/questions/34202761/laravel-5-eloquent-many-to-many-2ndary-table
'source' 카테고리의 다른 글
Vue.js - 선택한 항목 VM 바인딩이 작동하지 않음(bootstrap-vue)을 선택/드롭다운합니다. (0) | 2022.10.29 |
---|---|
특정 인덱스의 요소별로 목록/튜플을 정렬하려면 어떻게 해야 합니까? (0) | 2022.10.29 |
mysql -> tbl에 삽입(다른 테이블에서 선택) 및 일부 기본값 (0) | 2022.10.29 |
mysql의 기존 열명으로 두 열을 하나로 합칠 수 있는 방법은 무엇입니까? (0) | 2022.10.20 |
MariaDB: 테이블에 이름을 저장하는 방법 (0) | 2022.10.20 |