1. sequelize include문 올바르게 사용하기기

Untitled

현재 테이블 구조는 이렇게 user와 group이 다대다 관계이고, user_group_relation이 juction table로 정의 되어있다.

여기에서

const members = await User.findAll({
      include: [
        {
          model: UserGroupRelation,
          where: {
            group_id: group.group_id,
            request_status: 'a', // Assuming you want only approved members
          },
          attributes: [], // Exclude attributes from the UserGroupRelation model
        },
      ],
    });

이렇게 그룹요청에 승인된(그룹멤버)를 데려오고 싶었는데

데이터 처리 오류: EagerLoadingError [SequelizeEagerLoadingError]: user_group_relation is not associated to user! 이런 에러가 떴다.

그래서 찾아보니!!!!

include 문은 Sequelize에서 Eager Loading(즉시 로드)을 수행하는데 사용됩니다. 그러나 현재 코드에서 User 모델과 UserGroupRelation 모델 간에 직접적인 관계를 설정하진 않았습니다. 그렇기 때문에 include 문에서 UserGroupRelation 모델을 사용하는 것이 문제!!!!!

이걸 어떻게 고치지??

const members = await User.findAll({
  include: [
    {
      model: Group,
      through: { model: UserGroupRelation, where: { group_id: group.group_id, request_status: 'a' } },
      attributes: [], // Exclude attributes from the UserGroupRelation model
    },
  ],
});

이렇게 다대다 관계에서는 중간 테이블을 매개로 가져오려면 through옵션을 걸어주어야 한다!