Sequelize Relration

시퀄라이즈 관계 설정하기


시퀄라이즈를 통해 mysql에 생성한 테이블간의 관계를 성립 시키기 위해 관계 설정을 해주어야 한다. 관계 설정에는 어떤 방식이 이용되는지 살펴 보도록 하자.

👉Relretions

Sequelize에서 관계를 설정하기 위해 사용하는 옵션은 다음과 같다.

관계 설정 옵션
hasOne, belongsTo 1 대 1 관계
hasMany, belongsTo 1 대 N 관계
belongsToMany N 대 M 관계

3가지 관계에 대한 메서드는 표에 정리된 것과 같다.


👉관계 설정해보기

1 : 1 관계

일대일 관계를 맺는 방법은 참조될 정보를 가진 테이블에 hasOne 메서드를 키를 참조해가는 테이블에 belongsTo 메서드를 사용하면 된다.
예를 들어 유저 한명은 하나의 프로필 이미지를 가질 수 있다는 가정을 해보자.

1
2
3
4
5
6
7
8
9
// 유저 모델
static associate(db) {
db.User.hasOne(db.Image);
}

// 프로필이미지 모델
static associate(db) {
db.Image.belongsTo(db.User, { foreignKey: 'MyId', sourceKey: 'id' });
}

이렇게 설정 시 Image테이블에 ‘MyId’라는 외래키 컬럼이 생성된다.

1 : N 관계

일대다 관계를 맺는 방법은 참조될 정보를 가진 테이블에 hasMany 메서드를 키를 참조해가는 테이블에 belongsTo 메서드를 사용한다.
예를 들어 유저 한명은 여러개의 게시물을 작성 할 수 있다고 가정을 해보자.

1
2
3
4
5
6
7
8
9
// 유저 모델
static associate(db) {
db.User.hasMany(db.Post);
}

// 게시물 모델
static associate(db) {
db.Post.belongsTo(db.User, { foreignKey: 'UserId', sourceKey: 'id' });
}

이렇게 설정시 Post테이블에 ‘UserId’라는 외래키 컬럼이 생기며 1 대 다 관계가 성립이 된다.

N : M 관계

다대다 관계를 맺는 방법은 관계를 맺을 테이블에 belongsToMany 메서드를 사용하고 through 옵션으로 중간 테이블을 생성해주면 된다.
예를 들어 게시물에서 해시태그를 사용하며 동일한 해시태그가 여러개의 게시물에 사용 될 수 있다는 가정을 해보자

1
2
3
4
5
6
7
8
9
// 게시물 모델
static associate(db) {
db.Post.belongsToMany(db.Hashtag, { through: 'PostHashtag' });
}

// 해시태그 모델
static associate(db) {
db.Hashtag.belongsToMany(db.Post, { through: 'PostHashtag' });
}

이렇게 설정시 Post 테이블의 정보와 Hashtag 테이블의 정보를 참조하고 있는 중간 테이블이 생성되며 다대다 관계가 성립이 된다.

Author

han Ju Ryeon

Posted on

2021-09-09

Updated on

2021-12-05

Licensed under

댓글