node.js - Sequelize:定义关联
问题描述
阅读Sequelize
我在某种程度上感到困惑的文档,Sequelize
会自动为我们提供什么以及我们需要明确告诉它什么。我有两个模型:User
和Post
. 正如您所猜测的,一个用户可以有多个帖子,而一个帖子只属于一个用户。设置各自的关系将如下所示:
Post.associate = (models) => {
Post.belongsTo(models.users, {
as:'user',
foreignKey: {
name: 'user_id',
allowNull: false
}
}
}
User.associate = (models) => {
User.hasMany(models.posts, {
as:'posts',
onDelete:'CASCADE',
onUpdate:'CASCADE'
}
}
我的问题是:我应该foreignKey
在声明关联时再指定一次hasMany
,还是足以让 Sequelize 拥有foreignKey
两个模型之间声明的关系之一(在示例中 - belongsTo
)?
解决方案
从我认为发生的情况来看:
- Sequelize 会一一遍历你的所有关联
- 如果您已经提供了外键名称,那么很好
- 否则它将自行猜测/命名外键
就像它options.foreignKey
在文档中所说的那样,例如 belongsTo :https://sequelize.org/master/class/lib/model.js~Model.html#static-method-belongsTo(对于 hasOne、hasMany、belongsToMany 的描述相同)
options.foreignKey || 字符串或对象 || 可选的
源表中外键属性的名称或表示外列类型定义的对象(请参阅 Sequelize.define 的语法)。使用对象时,可以添加 name 属性来设置列的名称。默认为目标名称+目标主键
如果 sequelize 猜测您的 foreignKey 名称,那么只有当您的 foreignKey 名称不匹配 (tableName + Id) 或 (tableName + _ + id) 时,您才会遇到问题
因此,最好自己为关联双方提供 foreignKey 名称,以免进一步面临任何问题。
推荐阅读
- c# - Rest API 在控制器上未找到任何操作
- sqlite - 没有这样的表-世博会中的 SQLite 反应原生项目
- css - css/bootstrap/js 到我的树枝模板时的问题
- windows - Windows Batch:在循环内打开/关闭DelayedExpansion并在这样做时保留变量的值?
- java - 如何编写 Singleton 类 JUnit 测试用例
- amazon-web-services - 使用 EKS alb 入口运行状况检查管理的 ALB 前的 AWS Global Accelerator 失败
- javascript - ChartJS Y 轴刻度奇数
- asp.net-core - 如何更新具有额外外键字段的多对多关系
- c# - 如何避免在 C# 中将属性类插入 SQL 数据库
- database - 电子 .Net 核心。无法更新数据库。如何在 Electron 中配置 sqllite 或 sqlcompact