sequelize-typescript icon indicating copy to clipboard operation
sequelize-typescript copied to clipboard

Many to Many relationship: "TypeError: Right-hand side of 'instanceof' is not an object"

Open Attobrick-developer opened this issue 3 years ago • 0 comments

Issue

TypeError: Right-hand side of 'instanceof' is not an object

Versions

  • sequelize: 6.16.1
  • sequelize-typescript: ~2.1.3
  • typescript: ~4.5.5

Issue type

  • [x ] bug report
  • [ ] feature request

Actual behavior

I have failed to create models with many-to-many relationship.

Expected behavior

Steps to reproduce

Related code

// role.model.ts

import { BelongsToMany, Model, Table } from 'sequelize-typescript';

import { PermissionModel } from '../permissions';
import { RolePermissionModel } from './role-permission.model';

@Table({
  tableName: 'roles',
})
export class RoleModel extends Model {
  @BelongsToMany(() => PermissionModel, () => RolePermissionModel)
  permissions?: Array<PermissionModel & { RolePermissionModel: RolePermissionModel }>;
}

// permission.model.ts
import { BelongsToMany, Model, Table } from 'sequelize-typescript';

import { RoleModel, RolePermissionModel } from '../roles';

@Table({
  tableName: 'permissions',
})
export class PermissionModel extends Model {
  @BelongsToMany(() => RoleModel, () => RolePermissionModel)
  roles?: Array<RoleModel & { RolePermissionModel: RolePermissionModel }>;
}

// role-permission.model.ts

import { BelongsTo, Column, ForeignKey, Model, Table } from 'sequelize-typescript';
import { PermissionModel } from '../permissions';
import { RoleModel } from './role.model';

@Table({
  tableName: 'roles-permissions',
})
export class RolePermissionModel extends Model {
  @Column
  @ForeignKey(() => RoleModel)
  roleId!: number;

  @BelongsTo(() => RoleModel, 'roleId')
  role!: RoleModel;

  @Column
  @ForeignKey(() => PermissionModel)
  permissionId!: number;

  @BelongsTo(() => PermissionModel, 'permissionId')
  permission!: PermissionModel;
}

TypeError: Right-hand side of 'instanceof' is not an object at getForeignKeyOptions (C:\Project\node_modules\sequelize-typescript\dist\associations\foreign-key\foreign-key-service.js:26:40) at BelongsToManyAssociation.getSequelizeOptions (C:\Project\node_modules\sequelize-typescript\dist\associations\belongs-to-many\belongs-to-many-association.js:42:77) at C:\Project\node_modules\sequelize-typescript\dist\sequelize\sequelize\sequelize.js:53:45 at Array.forEach () at C:\Project\node_modules\sequelize-typescript\dist\sequelize\sequelize\sequelize.js:52:26 at Array.forEach () at Sequelize.associateModels (C:\Project\node_modules\sequelize-typescript\dist\sequelize\sequelize\sequelize.js:48:16) at Sequelize.addModels (C:\Project\node_modules\sequelize-typescript\dist\sequelize\sequelize\sequelize.js:40:14) at new Sequelize (C:\Project\node_modules\sequelize-typescript\dist\sequelize\sequelize\sequelize.js:20:22)

Attobrick-developer avatar Mar 11 '22 10:03 Attobrick-developer