0
votes

I implemented Sequelize TypeScript database ORM using MS SQL. Insert query and update query is working fine. While fetching data I try to associate the Model but its throwing error:

error - message: Foreign key for \"ScheduleModel\" is missing on \"EventModel\"

Parent table: schedule

export interface ScheduleAttribute {
  name: string;
  eventId: string;
  notes: string;
  events: EventAttributes[];
  createdBy: string;
}
export interface CreateScheduleAttributes extends Omit<ScheduleAttribute, 'id'> {}

@ObjectType({ simpleResolvers: true })
@Table({
  tableName: 'schedule',
})

export class ScheduleModel extends Model<ScheduleModel> implements ScheduleAttribute {
  @PrimaryKey
  @Field(() => ID)
  @Column({ defaultValue: DataType.UUIDV4 })
  id: string;

  @Field({ nullable: false })
  @Column({ field: 'name', allowNull: false })
  name: string;

  @PrimaryKey
  @Field(() => String, { nullable: true })
  @ForeignKey(() => EventModel)
  @Column
  eventId: string;

  @Field(type => [EventModel])
  @HasMany(()=>EventModel)
  events: EventModel[];

  @Field({ nullable: true })
  @Column({ field: 'createdBy', allowNull: true })
  createdBy: string;
} 

Child table:

export interface EventAttributes {
  eventname: string;
  eventDate: string;
  eventType: string;
}
export interface CreateEventAttribute extends Omit<EventAttributes, 'id'> {}

@ObjectType({ simpleResolvers: true })
@Table({
  tableName: 'events',
})

export class EventModel extends Model<EventModel> implements EventAttributes {
  @PrimaryKey
  @Field(() => ID)
  @Column({ defaultValue: DataType.UUIDV4 })
  id: string;

  @Field({ nullable: false })
  @Column({ field: 'eventname', allowNull: false })
  eventname: string;

    @Field({ nullable: false })
  @Column({ field: 'eventDate', allowNull: false })
  eventDate: string;

    @Field({ nullable: false })
  @Column({ field: 'eventType', allowNull: false })
  eventType: string;

  @BelongsTo(() => ScheduleModel, { foreignKey: 'eventId' })
  events: ScheduleModel;
}

Insert query is working fine. When try to get records it's throwing for below error:

error - message: Foreign key for \"ScheduleModel\" is missing on \"EventModel\"

I wrote following GetAPI:

sObj = await ScheduleModel.findAll({
  include: [
    {
      model:  EventModel,
    },
  ]
});
return sObj

Please help some to resolve it. Thanks in advance.

1
Didn't you forget to indicate foreignKey: 'eventId' on hasMany side? - Anatoly
I gave it that foreignKey: 'eventId'. What exactly you suggesting can you please put in code here - user15822248
I meant @HasMany(()=>EventModel, { foreignKey: 'eventId' }) in ScheduleModel - Anatoly
@ Anatoly I am not sure I created codebase is right or not. can you help with this association. I mean both modal how to associate. - user15822248

1 Answers

0
votes

At least you need to indicate the same foreignKey option with the same value on both sides:

export class ScheduleModel extends Model<ScheduleModel> implements ScheduleAttribute {
// other fields here
  @Field(type => [EventModel])
  @HasMany(()=>EventModel, { foreignKey: 'eventId' })
  events: EventModel[];
// other fields here