Sequelize - eager-loaded models의 order

BigbrotherShin·2020년 6월 9일
0

Backend

목록 보기
14/15
post-thumbnail

sequelize에서 eager-loading을 통해 관계있는 모델을 가져올 때 관계있는 모델의 데이터 순서(order)를 정하는 방법에 대해 알아보자.

Eager-Loading이란 : associated 된 여러 모델들을 한 번에 querying하는 것이다.
Manual | Sequelize

문제상황

어느 유저의 정보와 그 유저가 작성한 게시글들의 데이터도 같이 가져오려고 할 때, 게시글들을 최신 게시글이 맨 앞에 오도록 정렬하기 위해서 다음과 같은 명령을 적용하였는데 적용되지 않고 최신 게시글이 맨 마지막으로 정렬되었다.

db.User.findOne({
      where: {
        [Op.or]: [
          { id: isUserId },
          { nickname: decodeURIComponent(req.params.userData) },
        ],
      },
      include: [
        {
          model: db.Post,
          as: 'Posts',
          order: [['createdAt', 'DESC']], // 결론적으로 여기에 order를 정의하면 안된다.
          required: false,
          include: [
            {
              model: db.Image,
            },
          ],
        },

해결방법

참조: node.js - Ordering results of eager-loaded models in Node Sequelize - Stack Overflow

불러오려는 모델에서 order를 정의하지 않고, 원래 명령의 가장 상위(여기에서는 User)에서 order: [[{ model: [Model Name], as: [Model as Name]}, 'createdAt', 'DESC']], 명령을 추가해주면 되었다.

db.User.findOne({
      where: {
        [Op.or]: [
          { id: isUserId },
          { nickname: decodeURIComponent(req.params.userData) },
        ],
      },
      order: [[{ model: db.Post, as: 'Posts'}, 'createdAt', 'DESC']], // 여기에 정의할 것
      include: [
        {
          model: db.Post,
          as: 'Posts',
          required: false,
          include: [
            {
              model: db.Image,
            },
          ],
        },

References

profile
JavaScript, Node.js 그리고 React를 배우는

0개의 댓글