//migrations/20211118024449-urls_edit.js
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn(
"urls", //테이블명
"user_id", //필드명
{
type: Sequelize.INTEGER,
references: {model: "users", key: "id"}, //FK설정
onDelete: "CASCADE" //PK가 삭제되면 FK도 삭제됨
}
)
},
down: async (queryInterface, Sequelize) => {
//마이그래이션 롤백
await queryInterface.removeColumn("urls", "user_id");
}
};
제약이 추가되었다.
urls테이블에 레코드를 넣고(맨 오른쪽 필드가 FK다)
users테이블의 레코드를 삭제하면(PK 삭제)
urls테이블의 레코드도 삭제된다.
//models/url.js 중 일부
//models는 db객체이다
static associate(models) {
models.url.belongsTo(models.users, {
foreignKey: "user_id",
onDelete: "cascade" //PK가 삭제되면 FK도 같이 삭제된다
})
}
//models/users.js 중 일부
static associate(models) {
models.users.hasMany(models.url)
}
출처
여러 가지 외래 키 설정 방법
https://stackoverflow.com/questions/29904939/writing-migrations-with-foreign-keys-using-sequelizejs