Sequelize hasOne 关联限制

Posted

技术标签:

【中文标题】Sequelize hasOne 关联限制【英文标题】:Sequelize hasOne association limitation 【发布时间】:2016-09-14 12:44:41 【问题描述】:

如果MemberMemberAddition 是模型;

我创建了这样的关联:

Member.hasOne(MemberAdditional);
MemberAddition.belongsTo(Member);

使用自动生成的密钥 MemberId 创建一对一的关系

但是我如何将关联的 MemberAddition 记录限制为一个。

我使用内置函数进行关联:

// Used ES7 async/await
const member = await Member.create( ... );
const addition1 = await MemberAddition.create( ... );
const addition2 = await MemberAddition.create( ... );

await addition1.setMember(member);
await addition2.setMember(member); // Should be failed or set addition1 MemberId null

谢谢

【问题讨论】:

【参考方案1】:

在您的 MemberAddition 模型上添加具有唯一约束的字段。

memberId: 
  type: Sequelize.INTEGER,
  unique: true

【讨论】:

如果我必须为自动生成的相关字段设置唯一性,hasMany 和 hasOne 有什么不同? 我明白你的意思,尽管我认为答案是:hasMany 会将 getMemberAdditionals() 添加到 Member 的实例中,而 hasOne 会将 getMember() 添加到 MemberAdditional 的实例中。也许一个不错的选择是通过例如:Member.hasOne(MemberAdditional, through: unique: true ),但似乎 hasOne 不接受该选项。 奇怪的是hasOne不会自动将实例数限制为1。那么它和hasMany没有区别

以上是关于Sequelize hasOne 关联限制的主要内容,如果未能解决你的问题,请参考以下文章

Sequelize ORM中HasOne和BelongsTo的区别

续集更新或创建包含的关联

了解 Sequelize 中的关联

Sequelize 基于关联的查找

在 Sequelize 中限制延迟加载的关联

Sequelize 从 belongsTo 关系中获取值