관계 정의
기본키가 많은 값을 가진다. hasMany
외래키는 1개의 값에 속한다. belongsTo
한명의 유저는 여러개의 댓글을 가진다.
한개의 유저 아이디가 여러개의 댓글 아이디를 가진다.
유저 테이블의 기본키 아이디는 댓글테이블의 여러 댓글을 가진다.
그중 댓글 테이블의 commenter 댓글작성자 컬럼의 데이터 원천(sourceKey)는 유저 아이디이다.
static associate(db) {
db.User.hasMany(db.Comment, { foreignKey: "commenter", sourceKey: "id" });
}
여러개의 댓글은 한명의 유저에게 속할 수 있다.
여러개의 댓글 아이디는 한개의 유저아이디를 가질 수 있다.
댓글 테이블의 댓글은 하나의 유저에 속한다.
그중 commenter 댓글작성자 컬럼의 데이터가 가르키는 값(targetKey)은 유저 아이디이다.
static associate(db) {
db.Comment.belongsTo(db.User, { foreignKey: "commenter", targetKey: "id" });
}s
한명의 유저는 자기 자신의 1개의 정보를 갖는다.
유저 테이블의 기본키는 한개의 유저 정보테이블의 UserId를 갖는다.
유저 정보 테이블의 userId는 유저 테이블의 아이디에 속한다.
주의:
1:1 관계라고 해도 belongsTo와 hasOne이 반대이면 안 됩니다. belongsTo를 사용하는 Info 모델에 UserId 컬럼이 추가되기 때문입니다.
db.User.hasOne(db.Info, { foreignKey: 'UserId', sourceKey: 'id' });
db.Info.belongsTo(db.User, { foreignKey: 'UserId', targetKey: 'id' });
게시물과 해시태그의 관계
한개의 게시물은 여러개의 해시태그에 속할 수 있고, 한개의 해시태그는 여러개의 게시물에 속할 수 있다.
db.Post.belongsToMany(db.Hashtag, { through: 'PostHashtag' });
db.Hashtag.belongsToMany(db.Post, { through: 'PostHashtag' });
db.sequelize.models.PostHashtag 로 접근 가능
보통 커플링해서 사용함
One-To-One relationship : hasOne = belongsTo associations are used together.
One-To-Many relationship : hasMany = belongsTo associations are used together.
Many-To-Many relationship : blongsToMany = belongsToMany calls are used together.
실례
db.HospitalInfo.hasMany(db.HospitalFile, {
foreignKey: "hospital_id",
});
db.HospitalFile.belongsTo(db.HospitalInfo, {
foreignKey: "hospital_id",
onDelete: "NO ACTION",
});
hopital_id 컬럼은 모델 init 할때 정의하지 않아도 자동으로 생성