带有 Sequelize 和 Typescript 的外键
Posted
技术标签:
【中文标题】带有 Sequelize 和 Typescript 的外键【英文标题】:Foreign keys with Sequelize and 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
中唯一的列是UserId
,RoleId
不是唯一的(可以是1
或2
)
【参考方案1】:
如果您想要一对一的模型,即一个用户只能被分配一个角色,反之亦然然后对主键和外键约束使用相同的字段,否则使用不同的字段
【讨论】:
以上是关于带有 Sequelize 和 Typescript 的外键的主要内容,如果未能解决你的问题,请参考以下文章
TypeScript - 带有 Sequelize 的存储库模式
sequelize-typescript - 当使用带有 `tsc` 编译器(带有 NestJS)的 glob 配置时,无法解析模型模块
Node.js 和 sequelize-typescript - 数据访问对象和业务对象
使用 sequelize 和 typescript 进行自动迁移
Sequelize Typescript Sequelize Typescript TypeError:没有'new'就不能调用类构造函数模型