728x90
Model을 만드는 방법
- SQL직접 적용(mysql에 접속)
- 워크벤치 툴을 사용
- model 파일을 사용
시퀄라이즈에서는 자료형을 표현하는 방식에서 조금 차이가 있다.
models/user.js
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,
allowNull: false
},
comment: {
type: Sequelize.TEXT,
allowNull: true
},
created_at: {
type: Sequelize.DATE,
allowNull: false,
defaultValue: Sequelize.NOW
}
},
{
//모델에 대한 설정
sequelize,
timestamps: false, //timestamps 가 true 일 경우, createAt, updatedAt이 생긴다
underscored: false, //스네이크케이스를 사용할지 말지 여부(false면 사용 안한다), 직접만드는 것은 적용이 안된다
modelName: "User", //모델이름
tableName: "users", //테이블명
paranoid: true, //제거한 날짜가 추가된다, deletedAt -> 실제 제거된것은 아니다
charset: "utf8mb4",
collate: "utf8_general_ci"
}
);
}
static associate(db) {
db.User.hasMany(db.Comment, { foreignKey: "commenter", sourceKey: "id" });
}
};
models/comments.js
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',
});
}
};
models/index.js
const Sequelize = require("sequelize");
const User = require("./user");
const Comment = require("./comment");
const env = process.env.NODE_ENV || "development";
const config = require("../config/config")[env];
const db = {};
const sequelize = new Sequelize(
config.database,
config.username,
config.password,
config
);
db.sequelize = sequelize;
db.Sequelize = Sequelize;
db.User = User;
db.Comment = Comment;
User.init(sequelize);
Comment.init(sequelize);
User.associate(db);
Comment.associate(db);
module.exports = db;
- init으로 sequelize와 연결한다
- associate로 관계 설정한다
시퀄라이즈 모델 옵션

- 시퀄라이즈 모델의 자료형은 MySQL의 자료형과 조금 다르다
- define 메서드의 세 번째 인자는 테이블 옵션
- timestamps: true면 createdAt(생성 시간), updatedAt(수정 시간) 컬럼을 자동으로 만든다
- 예제에서는 직접 created_at 컬럼을 만들었으므로 false로 한다
- paranoid 옵션은 true면 deletedAt(삭제 시간) 컬럼을 만듦, 로우 복구를 위해 완전히 삭제하지 않고 deletedAt에 표시해둔다
- underscored 옵션은 캐멀케이스로 생성되는 컬럼을 스네이크케이스로 생성한다
- modelName은 모델 이름, tableName 옵션은 테이블 이름을 설정한다
- charset과 collate는 한글 설정을 위해 필요(이모티콘 넣으려면 utf8mb4로)하다.
728x90