Immersive 2주 프로젝트 Corum

chltndid724·2019년 9월 2일
0

immersive

목록 보기
18/22
post-thumbnail

Sequelize 자료형 ( MySQl 과 다른점 )

VARCHARSTRING으로, 
INTINTEGER, 
TINYINTBOOLEAN으로, 
DATETIMEDATE로 적습니다. 
INTEGER.UNSIGNEDUNSIGNED 옵션이 적용된 INT를 의미

allowNull은 NOT NULL 옵션과 동일
unique는 UNIQUE 옵션 
defaultValue는 기본값(DEFAULT)을 의미
now()를 사용해야 하므로 sequelize.literal 메서드 안에 넣어서 입력
이 메서드는 인자로 넣은 문자를 그대로 사용하는 역할을 합니다.

Sequelize 1 : N

시퀄라이즈에서는 1:N 관계를 hasMany라는 메서드로 표현합니다. 
users 테이블의 로우 하나를 불러올 때 연결된 comments 테이블의 
로우들도 같이 불러올 수 있습니다. 반대로 belongsTo 메서드도 있습니다. 
comments 테이블의 로우를 불러올 때 연결된 users 테이블의 로우를 가져옵니다.

1: 1


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' });

N : M

해시태그 일때 한 게시물에 해시태그가 여러개이고,
한 해시태그를 여러 게시물에서 사용할수 있다.

// through는 새로운 태이블 생성
db.Post.belongsToMany(db.Hashtag, { through:'PostHashtag' });
db.Hashtag.belongsToMany(db.Post, { through:'PostHashtag' });

⛹ sequelize.sync()

sequelize는 CRUD의 데이터 조작( DML : Data Manipulation Language ) 뿐만 아니라,
데이터 정의( DDL : Data Definition Language )도 지원함.

이미 만들어진 테이블에 Model을 매핑할 수 있을 뿐만 아니라,
DB에 테이블이 없는 상태라면 정의한 Model을 바탕으로 테이블을 생성할 수도 있습니다. (즉 , 메서드를 사용하면 서버 실행시 알아서 MySQL 과 연동)

🚴 sequelize.define('user', {

	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 }
    }
})
 

profile
힘들땐 블로그 하나더 적자!!![ Suyang ]

0개의 댓글