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

@ZungTa · 2021-12-10 금요일 · 1 min read

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

sample code

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
I'm a backend developer
© ZungTa Devlog, Built with Gatsby