2021-12-10 금요일
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');더 쉽고 좋은 방법이 있을 수도 있으니 다른 자료도 찾아보면 좋을 것 같다.