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