source

라라벨 5 웅변가 다수 대 다수 2차 테이블

lovecheck 2022. 10. 29. 10:03
반응형

라라벨 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_userLaravel이 바로 사용할 수 있는 동일한 명명 규칙을 따르도록 합니다. (관계에서 피벗 테이블 이름을 지정할 수 있지만 계속 사용할 이유가 없다면 이 작업을 수행할 필요가 없습니다.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

반응형