我在 sequelize-typescript 中有一个模型,Door.ts:
import { Table, Model, Column, AutoIncrement, PrimaryKey, ForeignKey, DataType, AllowNull, BelongsTo, HasMany } from 'sequelize-typescript';
import { Location } from '@modules/location';
import { AkilesServiceV1, AkilesServiceV0, IDoorService } from '@services/DoorService';
import { BelongsToGetAssociationMixin } from 'sequelize/types';
import { DoorLog } from '@modules/door_log';
import { HasManyCreateAssociationMixin } from 'sequelize';
@Table({ tableName: 'door' })
class Door extends Model<Door> {
@PrimaryKey
@AutoIncrement
@Column
id!: number;
@AllowNull(false)
@Column
type!: string;
@Column
button_id!: string;
@Column
gadget_id!: string;
@Column
action_id!: string;
@AllowNull(false)
@Column(DataType.ENUM('vehicular','pedestrian'))
access_type!: 'vehicular' | 'pedestrian';
@AllowNull(false)
@Column
description_tag!: string;
@Column(DataType.VIRTUAL)
description!: string;
@ForeignKey(() => Location)
@AllowNull(false)
@Column
location_id!: number;
@BelongsTo(() => Location)
location!: Location;
@HasMany(() => DoorLog)
door_logs!: DoorLog[];
public getLocation!: BelongsToGetAssociationMixin<Location>;
public createDoorLog!: HasManyCreateAssociationMixin<DoorLog>;
public async open () {
let doorService: IDoorService;
switch(this.type) {
case 'akiles-v0':
doorService = new AkilesServiceV0();
break;
case 'akiles-v1':
doorService = new AkilesServiceV1();
break;
default:
doorService = new AkilesServiceV1();
break;
}
//await doorService.open(this);
return await this.createDoorLog({ door_id: this.id, timestamp: new Date() });
}
public async getParking() {
const location: Location = await this.getLocation();
return await location.getParking();
}
}
export default Door
正如你所看到的,它有两个与 Mixin 相关的函数:
public getLocation!: BelongsToGetAssociationMixin<Location>;
public createDoorLog!: HasManyCreateAssociationMixin<DoorLog>;
第一个完美地使用它,如下所示:
await this.getLocation()
。但是,当我这样称呼它时,第二个:await this.createDoorlog ({door_id: this.id, timestamp: new Date ()})
返回以下错误:TypeError: this.createDoorLog is not a function
我也试过不带参数调用函数,但得到了相同的结果。我不明白为什么这两个函数虽然创建几乎相同,但行为却不同。我错过了
HasManyCreateAssociationMixin
的东西吗?谢谢你。
最佳答案
因为当我不可避免地再次遇到这个问题时,又被同样的问题所困扰。答案是将“as”添加到 @HasMany
mixin。 Sequelize 似乎有驼峰类的问题。
所以在这种情况下添加
@HasMany(() => DoorLog, options: {as: "doorLog" })
door_logs!: DoorLog[];
或者沿着这些路线的东西应该允许你使用这个mixin
关于node.js - Sequelize-typescript 'HasManyCreateAssociationMixin' 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58273415/