1:N 관계
한명의 user가 여러 개의 comment를 작성함
hasMany : users테이블의 로우 하나를 가져올 때 연결된 comments 테이블의 로우들(여러개)을 같이 불러온다
belongsTo : comments 테이블의 로우를 불러올 때 연결된 users 테이블의 로우를 가져옴
User.associate = (db) => {
db.User.hasMany(db.Post);
db.User.hasMany(db.Comment);
};
N:M 관계
belongsToMany
case 1 )
하나의 Post 에는 여러개의 tag 가 달릴 수 있고,
하나의 tag 에는 여러개의 Post가 관련될 수 있다
case 2 )
한명의 User는 여러개의 Post를 쓸 수 있고,
하나의 Post 에는 여러 User의 좋아요가 관련될 수 있다
Post : Like = 1: N // 하나의 게시글에 여러개의 좋아요
User : Like = 1: N // 한명의 user는 여러개의 좋아요를 가짐
즉 USER : POST =N:M
Parent.belongsToMany(Child, {
as: [Relationship],
through: [Parent_Child] //this can be string or a model,
foreignKey: 'Parent_rowId'
});
Child.belongsToMany(Parent, {
as: [Relationship2],
through: [Parent_Child],
foreignKey: 'Child_rowId'
});
as : 가끔씩 관계를 사용할 때 사용하는 모델의 이름을 바꾸고 싶을 때가 있다.
이럴 때는 아래처럼 as 옵션을 사용
through: Like로 했다면, Like 라는 through table이 mysql 데이터베이스에 생성된다.