VARCHAR는 STRING으로,
INT는 INTEGER로,
TINYINT는 BOOLEAN으로,
DATETIME은 DATE로 적습니다.
INTEGER.UNSIGNED는 UNSIGNED 옵션이 적용된 INT를 의미
allowNull은 NOT NULL 옵션과 동일
unique는 UNIQUE 옵션
defaultValue는 기본값(DEFAULT)을 의미
now()를 사용해야 하므로 sequelize.literal 메서드 안에 넣어서 입력
이 메서드는 인자로 넣은 문자를 그대로 사용하는 역할을 합니다.
시퀄라이즈에서는 1:N 관계를 hasMany라는 메서드로 표현합니다.
users 테이블의 로우 하나를 불러올 때 연결된 comments 테이블의
로우들도 같이 불러올 수 있습니다. 반대로 belongsTo 메서드도 있습니다.
comments 테이블의 로우를 불러올 때 연결된 users 테이블의 로우를 가져옵니다.
1:1 관계에서는 hasMany 메서드 대신 hasOne 메서드를 사용합니다.
사용자 정보를 담고 있는 가상의 Info 모델이 있다고 하면 다음과
같이 표현할 수 있습니다.
db.User.hasOne(db.Info, { foreignKey:'user_id', sourceKey:'id' });
db.Info.belongsTo(db.User, { foreignKey:'user_id', targetKey:'id' });
해시태그 일때 한 게시물에 해시태그가 여러개이고,
한 해시태그를 여러 게시물에서 사용할수 있다.
// through는 새로운 태이블 생성
db.Post.belongsToMany(db.Hashtag, { through:'PostHashtag' });
db.Hashtag.belongsToMany(db.Post, { through:'PostHashtag' });
sequelize는 CRUD의 데이터 조작( DML : Data Manipulation Language ) 뿐만 아니라,
데이터 정의( DDL : Data Definition Language )도 지원함.이미 만들어진 테이블에 Model을 매핑할 수 있을 뿐만 아니라,
DB에 테이블이 없는 상태라면 정의한 Model을 바탕으로 테이블을 생성할 수도 있습니다. (즉 , 메서드를 사용하면 서버 실행시 알아서 MySQL 과 연동)
name: {
type: 자료형 (STRING(글자수), INTEGER, FLOAT, TEXT, BOOLEAN)
allowNull : NULL 넣어도 돼냐,
unique: 고유값 여부,
comment: 컬럼 설명,
primaryKey : 기본키 여부(id대체)
},
created_at : {
type : DataTypes.DATE,
allowNull : false,
defaultValue : sequelize.literal('now()'), // DB 한테 직접 알아내라고함
}
timestamps: false, // 자동으로 시간 띄워줄까
underscored: treu, // 스네이크 쓸꺼냐
paranoid: true, //삭제일(복구용)
}
```
}
### Post.findAll({
include: { // 모델 간의 관계 연결
model : User,
where: { id : req.params.id }
}
})