sequelize / N:M limit, offset 가 가능하다 ?

flobeeee·2021년 4월 14일
2

시행착오

목록 보기
10/43
post-thumbnail

시도 1 : limit 을 여기저기 넣어봤다.

다대다 관계에서 limit 과 offset 을 설정하고 싶었다.
그러나 limit 을 아무리 넣어도 모든 데이터가 결과로 찍혔다.

UserModel.findAll({
      where: {
        id: userId,
      },
      include: [
        {
          model: ItemModel,
          required: true,
          as: 'Item',
          limit: 1, // 소용없다
          through: {
            attributes: ['UserId', 'ItemId'],
            limit: 1, // 소용없다
          }
        }
      ],
      limit: 1, // 소용없다
    })
      .then((result) => {
        console.log(result)
      })

시도2 : separate=true 속성을 사용해보았다.

Only HasMany associations support include.separate 에러발생
N:M 관계에서 에서는 해당 속성을 지원하지 않는다고 한다.

시도3 : subQuery: false (해결!!)

참고한 링크 를 보면 공식문서에도 없는 방법이라고 한다.
적용하니 아주 쉽게 문제가 해결되었다.
답변작성자는 node_modules / sequelize / lib / dialect / abstract / query_generator.js 파일을 열어봤다고 한다.
나도 경로를 따라서 봤지만, false 로 한다고 어떻게 가능한지 잘 모르겠다.

또 알아낸 것은
null 로 넣어도 잘 작동하지만,
undefined 로 넣으면 제대로 작동하지 않는다.

UserModel.findAll({
      where: {
        id: userId,
      },
      include: [
        {
          model: ItemModel,
          required: true,
          as: 'Item',
          through: {
            attributes: ['UserId', 'ItemId']
          }
        }
      ],
      offset: Number(offset) || 0,
      limit: 5,
      subQuery: false // 이 부분을 추가해줬더니 원하는 결과가 나왔다.
    })
      .then((result) => {
        console.log(result)
      })
profile
기록하는 백엔드 개발자

1개의 댓글

comment-user-thumbnail
2023년 5월 3일

감사합니다 !!

답글 달기