Sequelize 질문
344
작성한 질문수 9
안녕하세요
One-to-Many 관계
ondelete : "cascade" 관련 질문이 있습니다
게시판을 만들어서, 댓글 테이블과 대댓글 테이블을 One-to-Many관계로 해서, 댓글을 지우면 해당 댓글에 달린 대댓글도 같이 삭제가 되도록
ondelete : "cascade" 설정을 했습니다.
models/commnet(댓글).js
const Sequelize = require("sequelize");
module.exports = class Comment extends Sequelize.Model {
static init(sequelize) {
return super.init(
{
reply: {
type: Sequelize.TEXT,
allowNull: false,
},
nick: {
type: Sequelize.STRING(50),
allowNull: false,
},
},
{
sequelize,
timestamps: true,
underscored: false,
modelName: "Comment",
tableName: "comments",
paranoid: true,
charset: "utf8",
collate: "utf8_general_ci",
}
);
}
static associate(db) {
db.Comment.belongsTo(db.Post);
db.Comment.belongsTo(db.User);
db.Comment.hasMany(db.Recomment, { onDelete: "CASCADE", hooks: true });
}
};
models/recomment(대댓글).js
const Sequelize = require("sequelize");
module.exports = class Recomment extends Sequelize.Model {
static init(sequelize) {
return super.init(
{
re_reply: {
type: Sequelize.TEXT,
allowNull: false,
},
nick: {
type: Sequelize.STRING(50),
allowNull: false,
},
UserId: {
type: Sequelize.INTEGER(40),
allowNull: false,
},
},
{
sequelize,
timestamps: true,
underscored: false,
modelName: "Recomment",
tableName: "recomments",
paranoid: true,
charset: "utf8",
collate: "utf8_general_ci",
}
);
}
static associate(db) {
db.Recomment.belongsTo(db.Comment);
db.Recomment.belongsTo(db.Post);
}
};
Sequelize 공식 문서에 따라( https://sequelize.org/docs/v6/other-topics/hooks/#one-to-one-and-one-to-many-associations )
db.Comment.hasMany(db.Recomment, { onDelete: "CASCADE", hooks: true });db.Recomment.belongsTo(db.Comment);다음과 같이 작성했습니다. (안 되어서 양쪽에 {onDelete: "CASCADE", hooks : true} 를 다 넣어보기도 했지만 역시나 안 되었습니다.)
DB는 MySQL을 사용하고 있습니다.
위와 같이 한 후, npm start 를 하여서 MySQL에서 comment테이블과 recomment테이블이 생성되었는데, association에 의해 생긴 CommentId 속성이 onDelete set null 로 되어 있어서, migration을 진행했습니다.
처음에는 changeColumn 을 실행했는데, CommentId 기존의 것은 그대로 있고, onDelete cascade가 적용된 CommnetId가 하나 더 생기는 이상한 일이 발생해서, removeColumn 을 migration으로 진행한 후, 아래와 같이 addColumn을 진행해서, MySQL에서는 원하는 설정으로 나왔습니다.
"use strict";
/** @type {import('sequelize-cli').Migration} */
module.exports = {
async up(queryInterface, Sequelize) {
return queryInterface.addColumn("Recomments", "CommentId", {
type: Sequelize.INTEGER(40),
references: {
model: "comments",
key: "id",
},
onDelete: "CASCADE",
onUpdate: "CASCADE",
});
},
async down(queryInterface, Sequelize) {
return queryInterface.removeColumn("Recomments", "CommentId");
},
};

그런데
param.id로 CommentId를 받아와서 해당 id의 데이터를 comment테이블에서 삭제하도록 했을 때,
const CommentId = parseInt(req.params.id, 10);
await Comment.destroy({ where: { id: CommentId } });comment테이블에서 삭제가 되었으나, recomment 테이블에서는 삭제가 되지 않습니다..ㅠ 어떻게 해야 할까요?
답변 1
0
대댓글 하나를 더 추가한 다음에 다시 시도해보세요. 저 SQL이 적용된 게 맞다면 지워져야 합니다.
리눅스 노드 설치시 패키지
0
165
0
socket.js 에서 referer로부터 roomId를 가져올 때
0
909
3
스트리밍 방식으로 대용량 파일 업로드 & 다운로드 관련 질문
0
2286
2
a[title] 질문드립니다
0
380
1
리뉴얼 강의 및 공부 방법
0
583
1
jwt decode
0
1135
1
node.js 교과서 3판 질문드립니다
0
393
1
passport와 jwt
0
437
1
리뉴얼 강의
0
422
2
혹시 Node.js 교과서 3판 이북은 언제 나오나요?
0
356
1
몽고디비 사용자도 MYSQL부분을 들어야 하나요???
0
485
1
sql 쿼리 로그는 어떤 모듈이 작성하나요?
0
507
2
nunjucks res.render('error'); 작동을 안합니다.
0
514
1
질문있습니다.
0
348
1
multer 한글 파일 업로드시 파일명이 깨져요.
1
3538
1
수업자료는 어디있나요?
0
369
1
질문 있습니디
0
240
1
multer 사용시 file 외 name값은 못받나용?
0
421
1
코드 중복 부분 질문드립니다.
0
300
1
api 만드는 이유 질문드립니다.
0
290
1
Strategy의 done에 대해 질문드립니다.
0
368
1
안녕하세요 fs 권한 관련 질문드립니다
0
453
1
시퀄라이즈 연결질문...
0
503
2
res.setHeader vs res.cookie
0
1791
3





