sequelize - 한개의 모델에 똑같은 모델을 두번 join시키고 싶을 때

김예지·2021년 8월 3일
0

한개의 모델에 똑같은 모델을 두번 join시키고 싶을 때가 있다.
예를 들면 나의 경우는 다음과 같았다.
쪽지(message) 기능을 구현중인데, 테이블에 보내는 사람(from_id)과 받는 사람(to_id)이 있었고, user_id로 두번 조인을 해주고 싶었다.
그럴때는, 다음과 같이 설정해준다.

user.js 모델은 별도의 설정을 하지 않는다.

message.js 모델 설정

      message.belongsTo(models.user, {
        foreignKey: {
          name: "from_id",
          allowNull: false,
        },
        as: "messageFrom",
        targetKey: "user_id",
      });
      message.belongsTo(models.user, {
        foreignKey: {
          name: "to_id",
          allowNull: false,
        },
        as: "messageTo",
        targetKey: "user_id",
      });

값을 가져올 때 join하는 방법

const messages = await message.findAll({
      where: { to_id },
      include: [
        {
          model: user,
          as: "messageFrom",
          attributes: ["user_id", "nickname", "email"],
        },
        {
          model: user,
          as: "messageTo",
          attributes: ["user_id", "nickname", "email"],
        },
      ],
    });
    res.status(200).send({
      ok: true,
      result: messages,
    });

결론

  • foreign key 설정을 이름을 지정해서 두개로 만들어주고, include 할 때 위와 같이 as 옵션을 사용해서 넣어준다. 간단간단
profile
새싹

0개의 댓글