인프런 커뮤니티 질문&답변

smathj님의 프로필 이미지
smathj

작성한 질문수

[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지

시퀄라이즈 질문드립니다..

작성

·

184

0

안녕하세요 강사님

 

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를 가지고서)

라고 생각했습니다.

 

 

 

 

답변 1

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

오타입니다.

Kakao.associate(db)

Talk.associate(db);

smathj님의 프로필 이미지
smathj
질문자

강사님 감사합니다

..이런 실수를 문의해서 죄송합니다 

다음에는 좀더 확인하고 문의하겠습니다.

smathj님의 프로필 이미지
smathj

작성한 질문수

질문하기