sequelize associate와 include 사용하기

Written on September 11, 2019

관계형 DB를 사용하면서 서로 관계가 있는 테이블의 데이터를 함께 호출하고 싶은 경우가 있다. 이 때 손쉽게 사용할 수 있는 것이 associateinclude 이다.

associate는 테이블 간 관계를 정의해 주는 것이고, include는 db 쿼리 요청 시, 관계가 있는 테이블의 data도 함께 호출하는 것이다.

associate

BelongsTo, HasOne, HasMany, BelongsToMany의 네 가지 associate 타입을 가지고 있는데, models의 해당 파일에 아래와 같이 정의해 주면 된다.

    ...
    {
      tableName: "reviews",
      timestamps: true
    }
  );
  reviews.associate = function(models) {
    reviews.hasMany(models.Todos, { foreignKey: "reviewId" });
  };
  return reviews;

위의 예제에서, 1개의 review는 많은 todo 리스트를 가지고 있는 1:N 관계이며, todo 테이블은 foreignKeyreviewId를 가지고 있다.

특정 review를 호출하면서, 관계된 todo도 호출하고 싶은 경우이다.

include

이를 이용한 findOne 쿼리는 아래와 같이 작성할 수 있다. Reviews 테이블에서 특정 reviewId를 가진 리뷰 내용을 호출함과 동시에, Todos 테이블에 있는 todo 중, 그 reviewId를 가진 데이터를 ‘todos’라는 키의 값으로 같이 호출하는 것이다.

Reviews.findOne({
  include: [
    {
      model: Todos,
      as: "todos",
      where: { reviewId }
    }
  ],
  where: {
    reviewId:
  },
  attributes: ["date", "review"]
});

그럼 결과 값은 아래와 같이 반환된다.

{
    date: date,
    review: review,
    todos: [todos...]
}

👩🏻‍💻 배우는 것을 즐기는 프론트엔드 개발자 입니다
부족한 블로그에 방문해 주셔서 감사합니다 🙇🏻‍♀️

in the process of becoming the best version of myself