테이블에 대응되는 시퀄라이즈 모델 생성
const Sequelize = require('sequelize');
module.exports = class User extends Sequelize.Model {
static init(sequelize) {
return super.init({
// 아이디는 자동으로 생성해주기 때문에 생략 가능
name: {
type: Sequelize.STRING(20),
allowNull: false,
unique: true, // 고유하게 만들어줌
},
age: {
type: Sequelize.INTEGER.UNSIGNED,
allowNull: false,
},
married: {
type: Sequelize.BOOLEAN, // SQL에서는 TINYINT
allowNull: false,
},
comment: {
type: Sequelize.TEXT,
allowNull: true,
},
created_at: {
type: Sequelize.DATE, // SQL에서는 DATETIME, DateOnly사용하면 date만
allowNull: false,
defaultValue: Sequelize.NOW,
},
}, {
sequelize,
timestamps: false, // 원래는 True -> createAt, updateAt 제공해줌
underscored: false, // createAt or create_at 둘중에 하나 선택
modelName: 'User', // js에서 사용하는 이름
tableName: 'users', // sql에서 사용하는 이름
paranoid: false, // deleteAt 복구하기 위해서
charset: 'utf8',
collate: 'utf8_general_ci',
});
}
// 밑에 모델 관계 설명에 대한 코드
static associate(db) {
db.User.hasMany(db.Comment, { foreignKey: 'commenter', sourceKey: 'id' });
}
};
시퀄라이즈 모델의 자료형은 MySQL의 자료형과 조금 다름
define 메서드의 세 번째 인자는 테이블 옵션
- timestamps: true면 createdAt(생성 시간), updatedAt(수정 시간) 컬럼을 자동으로 만듦
- 예제에서는 직접 created_at 컬럼을 만들었으므로 false로 함
- paranoid 옵션은 true면 deletedAt(삭제 시간) 컬럼을 만듦, 로우 복구를 위해 완전히 삭제하지 않고 deletedAt에 표시해둠
- underscored 옵션은 캐멀케이스로 생성되는 컬럼을 스네이크케이스로 생성
- modelName은 모델 이름, tableName 옵션은 테이블 이름을 설정
- charset과 collate는 한글 설정을 위해 필요(이모티콘 넣으려면 utf8mb4로)
users 모델과 comments 모델 간의 관계를 정의
- 1:N 관계 (사용자 한 명이 댓글 여러 개 작성)
- 시퀄라이즈에서는 1:N 관계를 hasMany로 표현(사용자.hasMany(댓글))
- 반대의 입장에서는 belongsTo(댓글.belongsTo(사용자))
- belongsTo가 있는 테이블에 컬럼이 생김(댓글 테이블에 commenter 컬럼)
const Sequelize = require('sequelize');
module.exports = class Comment extends Sequelize.Model {
static init(sequelize) {
return super.init({
comment: {
type: Sequelize.STRING(100),
allowNull: false,
},
created_at: {
type: Sequelize.DATE,
allowNull: true,
defaultValue: Sequelize.NOW,
},
}, {
sequelize,
timestamps: false,
modelName: 'Comment',
tableName: 'comments',
paranoid: false,
charset: 'utf8mb4',
collate: 'utf8mb4_general_ci',
});
}
/// 이부분을 보면 됨
static associate(db) {
db.Comment.belongsTo(db.User, { foreignKey: 'commenter', targetKey: 'id' });
}
};
'Node.js' 카테고리의 다른 글
프로젝트 구조 갖추기 (0) | 2021.01.03 |
---|---|
시퀄라이즈 쿼리 (0) | 2020.12.30 |
시퀄라이즈 ORM와 Nodejs에 mysql 연결 (0) | 2020.12.28 |
템플릿 엔진 사용하기 (0) | 2020.12.23 |
라우터 객체로 라우터 분리와 req, res 객체 살펴보기 (0) | 2020.12.22 |