위와 같이 users와 posts 테이블 그리고 그 둘의 관계테이블인 likes을 예로 보자.
USER
테이블 posts의 모델은 POST
라고 할 때 이 둘의 관계는 1대다
이다. 다대다
의 관계에 있다.시퀄라이즈를 사용시 User와 Post의 추가적인 관계를 표현할때 알리아스를 사용할 수 있다.
접합테이블 likes를 만들 때 User와 Post를 각각Liker
,Liked
의 알리아스로 표현했다.
이제 포스트의 좋아요를 한 유저정보를 조회해올 것인데 만약 아래와 같이 조회를 해보자.
const post = await Post.findOne({
where: { postKey, isDeleted: false },
{
model: User,
as: 'Liker',
attributes: ['id'],
}
]
})
이 결과는 아래와 같은 정보가 조회된다.
{
// ... post 컬럼정보들
"Liker": [
{
"id": 1,
"likes": {
"createdAt": "2021-06-12T06:33:52.000Z",
"updatedAt": "2021-06-12T06:33:52.000Z",
"postId": 1,
"userId": 1
}
}
]
}
likes 테이블의 정보가 필요없는 경우 이것들을 제외하려면 아래와 같이 조회해야한다.
const post = await Post.findOne({
where: { postKey, isDeleted: false },
{
model: User,
as: 'Liker',
attributes: ['id'],
through: {
attributes: []
}
}
]
})
이 결과는 아래와 같이 likes 테이블의 컬럼정보가 제외된다.
//결과
{
//...post 컬럼정보 etc
"Liker": [
{
"id": 1
}
]
}