[Laravel] 다중 대 다중 관계(구조, 정의)

5105 단어 PHPLaravel

다대다 관계


표의 데이터는 다른 표의 여러 표 간의 관계와 서로 연결된다.
예:
SNS의'좋아요'처럼 여러 사용자와 여러 트위터를 연결하는 기능의 경우.

사용자는 여러 개의 트위터에 "좋아요"를 표시할 수 있습니다.
트위터는 여러 사용자에게'좋아요'를 받았다.
단지 두 개의 표만이 이런 다대다의 관계를 나타낼 수 없다.

중간표


두 표의 관계성을 나열한 중간표를 설정하여 중간표와 두 표가 각각 한 쌍의 관계를 결합시켜 중간표를 경유하는 여러 쌍의 관계를 형성한다.

users표, tweets표는 각각 한 쌍이 넘는 방식으로favorites표 (중간표) 와 연결됩니다.
방금의 관계는 아래와 같다.
user_id
tweet_id








사용자 테이블과 트위터 테이블은favorites 테이블을 통해 서로의 id를 알 수 있습니다.

마이그레이션에서 외부 키 설정


favorites표 (중간표) 에서user와 트위터의 id를 참조하기 위해 키를 설정합니다.
public function up()
{
  Schema::create('favorites', function (Blueprint $table) {
    $table->unsignedInteger('user_id');
    $table->unsignedInteger('tweet_id');
    $table->primary(['user_id','tweet_id']);

    // 外部キー制約
    $table->foreign('user_id')->references('id')->on('courses')->onDelete('cascade');
    $table->foreign('tweet_id')->references('id')->on('students')->onDelete('cascade');
 });
}

모델에서 관계식 정의하기


belongsToMany () 에서 관계 방법을 정의합니다.방법명은 복수형이다.
User.php

class User extend Model
{
   public function tweets()
   {
     return $this->belongsToMany(Tweet::class);
   }
}
Tweet.php

class User extend Model
{
   public function users()
   {
     return $this->belongsToMany(User::class);
   }
}
나는 이런 관계의 정의가 잘 되었다고 생각한다.
다중 링크 작업 (중간표의 insert,delete 작업), attach (), detach () 에 대해 서로 다른 보도로 정리했다.
다중 대 다중 관계 (링크 작업 정보)

좋은 웹페이지 즐겨찾기