保持多对多关系TypeError:无法读取未定义的属性“名称”

时间:2019-12-05 12:53:41

标签: typescript sequelize.js sequelize-typescript

我有一个与下面的代码相似的多对多关系模型。 VendorEmployeeModel代表一个联接表,但是除非他们签署并把他们的Employee记录链接到他们的Employee记录,否则不一定会有VendorEmployee记录(卖方可能只是创建VendorEmployee记录以跟踪每个Employee当前正在做什么。鉴于VendorEmployeeModel代表的不只是一个联接表,我不使用BelongsToMany装饰器。

我在整个代码库中使用BelongsToHasMany装饰器,没有问题。似乎唯一不同的是,Vendor可以有很多VendorEmployees,而VendorEmployee可以有很多Vendors(可以将其看作是场景)。

我在这里看到的错误是:

    TypeError: Cannot read property 'name' of undefined
      at Object.getForeignKeyOptions (node_modules/sequelize-typescript/dist/associations/foreign-key/foreign-key-service.js:24:40)
      at HasAssociation.getSequelizeOptions (node_modules/sequelize-typescript/dist/associations/has/has-association.js:17:52)
      at associations.forEach.association (node_modules/sequelize-typescript/dist/sequelize/sequelize/sequelize.js:49:45)
          at Array.forEach (<anonymous>)
      at models.forEach.model (node_modules/sequelize-typescript/dist/sequelize/sequelize/sequelize.js:48:26)
          at Array.forEach (<anonymous>)
      at Sequelize.associateModels (node_modules/sequelize-typescript/dist/sequelize/sequelize/sequelize.js:44:16)
      at Sequelize.addModels (node_modules/sequelize-typescript/dist/sequelize/sequelize/sequelize.js:36:14)
      at new Sequelize (node_modules/sequelize-typescript/dist/sequelize/sequelize/sequelize.js:18:22)
      at SequelizeConnection.initialize (src/common/infrastructure/sequelize.ts:30:21)
      at DatabaseTestFrameworkSimple.<anonymous> (test/framework/database.ts:74:24)
      at test/framework/database.ts:8:71
      at Promise._execute (node_modules/bluebird/js/release/debuggability.js:427:9)
      at Promise._resolveFromExecutor (node_modules/bluebird/js/release/promise.js:518:18)
      at new Promise (node_modules/bluebird/js/release/promise.js:103:10)
      at Object.<anonymous>.__awaiter (test/framework/database.ts:4:12)
      at DatabaseTestFrameworkSimple.initializeTestDb (test/framework/database.ts:71:16)
      at DatabaseTestFrameworkSimple.<anonymous> (test/framework/database.ts:98:16)
      at fulfilled (test/framework/database.ts:5:58)
      at tryCatcher (node_modules/bluebird/js/release/util.js:16:23)
      at Promise._settlePromiseFromHandler (node_modules/bluebird/js/release/promise.js:547:31)
      at Promise._settlePromise (node_modules/bluebird/js/release/promise.js:604:18)
      at Promise._settlePromise0 (node_modules/bluebird/js/release/promise.js:649:10)
      at Promise._settlePromises (node_modules/bluebird/js/release/promise.js:729:18)
      at _drainQueueStep (node_modules/bluebird/js/release/async.js:93:12)
      at _drainQueue (node_modules/bluebird/js/release/async.js:86:9)
      at Async.Object.<anonymous>.Async._drainQueues (node_modules/bluebird/js/release/async.js:102:5)
      at Immediate.Async.drainQueues [as _onImmediate] (node_modules/bluebird/js/release/async.js:15:14)

除了该主要错误外,我还看到了SequelizeUniqueConstraintError: Validation errorTypeError: Cannot read property 'query' of undefined。如果删除VendorEmployeeVendor BelongsTo / HasMany装饰器,则一切正常(存储库中的其他包含项)。

代码如下:

@Table({
  tableName: 'VendorEmployee'
})
export default class VendorEmployeeModel extends Model<VendorEmployeeModel> {
  @Default(() => IdUtility.generateUid())
  @Column
  uid!: string;

  @ForeignKey(() => VendorModel)
  @Column
  vendorId!: number;

  @BelongsTo(() => VendorModel)
  vendor: VendorModel;

  @ForeignKey(() => EmployeeModel)
  @Column
  employeeId: number;

  @BelongsTo(() => EmployeeModel)
  employee: EmployeeModel;

  @IsEmail
  @Column
  email: string;

  @Column
  phone!: string;

  @Column
  firstName!: string;

  @Column
  lastName!: string;
}

@Table({
  tableName: 'Vendor'
})
export default class VendorModel extends Model<VendorModel> {
  @Unique
  @Default(() => IdUtility.generateUid())
  @Column
  uid: string;

  @HasMany(() => VendorEmployeeModel)
  vendorEmployees: VendorEmployeeModel[];
}

@Table({
  tableName: 'Employee'
})
export default class EmployeeModel extends Model<EmployeeModel> {
  @Unique
  @Default(() => IdUtility.generateUid())
  @Column
  uid: string;

  @Unique
  @Column
  userUid: string;

  @HasMany(() => VendorEmployeeModel)
  carrierDriver: VendorEmployeeModel[];
}

版本:

  • 续集:^ 5.17.2
  • sequelize-typescript:1.0.0
  • 打字稿:3.7.2

0 个答案:

没有答案