【问题标题】:Foreign keys with Sequelize and Typescript带有 Sequelize 和 Typescript 的外键
【发布时间】:2018-05-23 17:13:49
【问题描述】:

鉴于这 2 个 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

我想这意味着这两个表具有相同的列名UserId,这会导致问题吗? 如果是这样,我该如何解决?给它某种别名?还是怎么做?

【问题讨论】:

  • 您已指定 UserRolls.prototype.UserId 是主键。似乎UserRolls.prototype.RoleId 应该是主键。
  • @AluanHaddad 但在我的表UserRoles 中唯一的列是UserIdRoleId 不是唯一的(可以是12

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-07-20
    • 2014-08-10
    • 2021-07-25
    • 1970-01-01
    • 2021-11-02
    • 2021-09-18
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多