sequelize.js 동적으로 생성된 테이블 모델 접근방법

models 디렉터리에서 db를 export 해 줄 것이다.

샘플 코드

const Sequelize = require('sequelize');
const env = process.env.NODE_ENV || 'development';
const config = require('../config/config')[env];
const db = {};

// config.logging = false;
const sequelize = new Sequelize(
  config.database,
  config.username,
  config.password,
  config
);

db.sequelize = sequelize;
db.Sequelize = Sequelize;

// DB model import
db.User = require('./user')(sequelize, Sequelize);
db.Post = require('./post')(sequelize, Sequelize);
db.Hashtag = require('./hashtag')(sequelize, Sequelize);
console.log('db model imported', db.User, db.Post);

// 관계 연결 1:N
db.User.hasMany(db.Post);
db.Post.belongsTo(db.User);
console.log('관계 연결 1:N');

// 관계 연결 N:M
db.Post.belongsToMany(db.Hashtag, { through: 'PostHashtag' });
db.Hashtag.belongsToMany(db.Post, { through: 'PostHashtag' });
console.log('관계 연결 n:m');

db.User.belongsToMany(db.User, {
  foreignKey: 'followingId',
  as: 'Followers',
  through: 'Follow',
});
db.User.belongsToMany(db.User, {
  foreignKey: 'followerId',
  as: 'Followings',
  through: 'Follow',
});
console.log('팔로우 생성');

module.exports = db;

이렇게 models/index.js 에서 모델들을 가져와서 작업하고 관계 연결하고 등등을 하고 export 하는데

N:M 관계를 위해 생성된 Follow 모델을 어떻게 접근할 것인가?

module.exports 해주는 db 객체에 보면

db.sequelize.models 안에 모델들이 들어있다. Follow 모델 포함해서.

그래서 이렇게 작성하면 된다.

const {
  User,
  sequelize: {
    models: { Follow },
  },
} = require('../models');

더 쉽고 좋은 방법이 있을 수도 있으니 다른 자료도 찾아보면 좋을 것 같다.


ZungTa
Written by
ZungTa
ZungTa입니다.

GitHub