과거 프로그래밍 자료들/프로젝트
sequelize belongsToMany 내 as 시퀄라이즈 사용
평부
2022. 9. 6. 14:54
* 상황 : User함수를 Followers, Followings로 as로 명칭 정함, through를 통해 "Follow" 모델을 생성
= (sql문: create Follow)
- as에 적힌 문자를 통해 다양한 시퀄라이즈 생성(belongsToMany 일 때만 가능)
ex) addFollowings, addFollowing, getFollowing, setFollowing, removeFollowing 지원
A.getB : 관계 있는 로우(row) 조회
A.addB : 관계 생성
A.setB : 관계 수정
A.removeB : 관계 제거
db.User.belongsToMany(db.User, {
foreignKey: "followingId",
as: "Followers",
through: "Follow",
});
db.User.belongsToMany(db.User, {
foreignKey: "followerId",
as: "Followings",
through: "Follow",
});
https://www.inflearn.com/questions/6670
https://www.youtube.com/watch?v=qIVTBRAaVBQ&list=PLcqDmjxt30RuRk0gcFwT_s7nexAYRF2_I&index=58
(1번) model : Post 항목 삭제 vs (2번) model Use에서 belongsToMany를 통해 만들어진 as로 팔로잉 삭제
//1번
router.delete("/:id", isLoggedIn, async (req, res, next) => {
try {
await Post.destroy({ where: { id: req.params.id, userId: req.user.id } });
res.send("OK");
} catch (error) {
console.error(error);
next(error);
}
//2번
router.post("/:id/unfollow", async (req, res, next) => {
try {
const user = await User.findOne({ where: { id: req.user.id } });
if (user) {
const result = await user.removeFollowing(parseInt(req.params.id, 10));
res.json(result);
} else {
res.status(404).send("no user");
}
} catch (error) {
console.error(error);
next(error);
}
});