나의 개발일지(김지헌)
항해 99 58일차 11/15일 본문
오늘은 모델들의 관계 설정을 해주었다.
자바스크립트에서 관계 설정을 해줄때는 User <-> Post의 모델들이 있으면 서로 테이블에서 참조를 했었는데
더보기
---유저 모델---
//포스트로 유저 아이디를 보낸다.
this.hasMany(models.Post,{ sourceKey : "userId",foreignKey : "userId" })
---포스트 모델---
//포스트는 유저에서 보낸 유저아이디를 받아서 포링키로 보내준다
this.belongsTo(models.User,{targetKey : "userId",foreignKey : "userId" })
이런식으로 모델 두개를 사용해서 관계 메소드를 사용했었고 타입스크립트에서도 똑같이 사용을 하니 처음에는
"'User[]' 형식에 'userId' 속성이 없습니다.", 라는에러가 떳었고
수정을 하고 나니 hasmany called with something that's not a subclass of sequelize.model 라는 오류가 떳다
관계 메서드를 두번 호출을 하게 해서 나오는 에러였다.
이유를 찾아보니 두개의 모델에서 사용하는것이 아닌 참조하는 모델에서 관계설정을 해줘야 하는것이였다.
더보기
import { Association, DataTypes, Model } from 'sequelize';
import Camp from './camp';
import sequelize from './sequlize';
import User from './user';
export class Pick extends Model {
//? 조회 후 사용 되어질 요소들의 타입명시 설정이 되어 있지 않으면 조회시 또는 조회 후 데이터 타입체크에서 오류
public readonly PickId!: number;
public campId!: number;
public userId!: number;
//관계 타입
public User!: User;
public Camp!: Camp;
//관계 설정
public static associations: {
Camp: Association<Camp>;
Pick: Association<Pick>;
User: Association<User>;
};
}
//? 모델 생성
Pick.init(
{
pickId: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: DataTypes.MEDIUMINT,
},
campId: {
allowNull: false,
type: DataTypes.MEDIUMINT,
},
userId: {
allowNull: false,
type: DataTypes.MEDIUMINT,
},
},
{
sequelize, //? 생성한 Sequelize 객체 패싱
modelName: 'Pick',
tableName: 'pick',
freezeTableName: true,
timestamps: false,
}
);
//두모델에서 사용한걸 하위모델에서 작성함
Camp.hasMany(Pick, {
sourceKey: 'campId',
foreignKey: 'campId',
as: 'Pick',
});
Pick.belongsTo(Camp, {
foreignKey: 'campId',
as: 'Camp',
});
User.hasMany(Pick, {
sourceKey: 'userId',
foreignKey: 'userId',
as: 'Pick',
});
Pick.belongsTo(User, {
foreignKey: 'userId',
as: 'User',
});
export default Pick;
이런식으로 두개의 모델에서 나누어서 보냈는 것을 하위 모델에서 사용해야 두번 호출 하는 에러를 잡을 수 있었다.
'항해 99' 카테고리의 다른 글
항해 99 60일차 11/17일 (0) | 2022.11.18 |
---|---|
항해 99 59일차 11/16일 (0) | 2022.11.17 |
항해 99 57일차 11/14일 (0) | 2022.11.15 |
항해 99 56일차 11/13일 (0) | 2022.11.14 |
항해 99 55일차 11/12일 (0) | 2022.11.13 |