안녕하세요 강사님
ch7에 해당하는
Sequelize 실습에서
hasMany - belongsTo 를 테이블 이름에 칼럼 만바꿔서 테스트를해보니
다음과 같은 에러가 계속 발생하였습니다.
강의에서 users ----------- comments 관계처럼
kakao ------------ talk 로 같은 관계로 테스트하였습니다.
1. kakao.js
const Sequelize = require('sequelize');
module.exports = class Kakao extends Sequelize.Model {
static init(sequelize) {
return super.init({
name : {
type : Sequelize.STRING(20),
allowNull : false,
unique : true,
},
job : {
type : Sequelize.STRING(30),
allowNull : true,
},
sex : {
type : Sequelize.STRING(2), // 남자,여자
allowNull : false,
},
created_at : {
type : Sequelize.DATE,
allowNull : false,
defaultValue : Sequelize.NOW,
},
},{
sequelize,
timestamps : false, // 강제로 createAt,updatedAt 칼럼 만들지 말아줘
undescored : false, // 스네이크 케이스로 사용할꺼야
modelName : 'Kakao',
tableName : 'kakao',
paranoid: false,
charset: 'utf8',
collate: 'utf8_general_ci',
});
}
static associate(db) {
db.Kakao.hasMany(db.Talk, { foreignKey: 'nicName', sourceKey: 'id' });
}
};
2.talk.js
const Sequelize = require('sequelize');
module.exports = class Talk extends Sequelize.Model {
static init(sequelize) {
return super.init({
talk : {
type : Sequelize.STRING(100),
allowNull : true,
},
created_at : {
type : Sequelize.DATE,
allowNull : false,
defaultValue : Sequelize.NOW,
},
},{
sequelize,
timestamps: false,
modelName : 'Talk',
tableName : 'talk',
paranoid: false,
charset: 'utf8mb4',
collate: 'utf8mb4_general_ci',
});
}
static associate(db) {
db.Talk.belongsTo(db.Kakao, { foreignKey: 'nicName', targetKey: 'id' });
}
};
3. index.js
const Sequelize = require('sequelize');
const Kakao = require('./kakao');
const Talk = require('./talk');
// NODE_ENV가 정의되지않으면 개발모드!
const env = process.env.NODE_ENV || 'development';
const config = require('../config/config')[env];
const db = {};
// DB ID PWD Config_File
const sequelize = new Sequelize(config.database, config.username, config.password, config);
db.sequelize = sequelize;
db.Kakao = Kakao;
db.Talk = Talk;
console.log(sequelize);
Kakao.init(sequelize);
Talk.init(sequelize);
Kakao.associate(sequelize);
Talk.associate(sequelize);
module.exports = db;
어떤차이가 있는걸까요..?
저는
db.Kakao.hasMany(db.Talk, { foreignKey: 'nicName', sourceKey: 'id' });
db.Talk.belongsTo(db.Kakao, { foreignKey: 'nicName', targetKey: 'id' });
이두줄을 kakao는 테이블의 고유한 pk가 talk테이블에 많다.(칼럼으로서는 id)
즉 talk 테이블에서 nicName이라는 칼럼을 foreignkey으로 사용하겠다.(kakao의 id를 가지고서)
라고 생각했습니다.
2021. 12. 05. 19:48
강사님 감사합니다
..이런 실수를 문의해서 죄송합니다
다음에는 좀더 확인하고 문의하겠습니다.