带有Sequelize和Typescript的外键

时间:2017-12-09 18:08:40

标签: javascript node.js postgresql typescript sequelize.js

鉴于这两个Sequelize模型:

export class Users extends Model<Users> {

    @HasMany(() => UserRoles)
    @Column({ primaryKey: true, allowNull: false, unique: true })
    UserId: string;

    @Column({ allowNull: false, unique: true })
    Email: string;
}

export class UserRoles extends Model<UserRoles> {

    @ForeignKey(() => Users)
    @Column({ primaryKey: true, allowNull: false, unique: true })
    UserId: string;

    @Column({ allowNull: false })
    RoleId: number;
}

当我创建用户时,我还会在UserRoles中创建一行,其中UserId是外键,因此始终存在一对一的匹配。

当我尝试运行时,我得到:

Error: Naming collision between attribute 'UserId' and association 'UserId' on model Users. To remedy this, change either foreignKey or as in your association definition

我想这意味着2个表具有相同的列名UserId并导致问题? 如果是这样,我该如何解决?给它一些别名?或者怎么样?

1 个答案:

答案 0 :(得分:0)

如果您想要一对一的模型,即一个用户只能被分配一个角色,反之亦然,那么对主键和外键约束使用相同的字段,否则使用不同的