本文将介绍 Sequelize 如何正确使用 associate 进行关联操作。Sequelize 是 Node.js 中一款优秀的 ORM(Object-Relational Mapping)框架,可用于 Node.js 和浏览器环境中的 JavaScript 应用程序。Sequelize 具有强大的基于 Promise 和异步的特性,可以节约开发者的时间并提高采用数据库进行开发的可维护性和可靠性。
associate 的作用
Sequelize 中的 associate 方法是用来关联多个模型的方法。通过使用 associate 方法,你可以在一个模型中指定其他模型的关联关系,建立相应的外键,并定义好二者之间的关联方式。associate 方法一般在模型定义之后,通常是在统一的地方进行引用及配置,如 index.js 或 config.js 中进行配置。
associate 的用法
下面简要介绍 associate 的用法。以一对一的关系为例,如下定义一个 User 模型及一个 Profile 模型:
-- -------------------- ---- ------- ----- ---- - ------------------------ - --- - ----- ------------------ ----------- ----- -------------- ----- ---------- ----- -- ----- ----------------- ------ ----------------- --------- ---------------- --- ----- ------- - --------------------------- - --- - ----- ------------------ ----------- ----- -------------- ----- ---------- ----- -- ---- ------------------ ------- ----------------- ------- ----------------- ---
在这里,我们使用了 define 方法来定义两个模型,分别是 User 和 Profile,这两个模型分别对应了一个 user 数据表和一个 profile 数据表。
在上述代码中,有个比较重要的字段: userId。需要注意的是,这个字段的命名一定是模型名称 + Id 形式的,如果像 user_id 或任意其他形式的,Sequelize 将无法识别将其作为外键关联的字段。
接下来,我们便可以通过 associate 方法建立 User 模型和 Profile 模型之间的关联关系,在 index.js 中编写代码(config.js 中同样适用):
User.hasOne(Profile, { foreignKey: 'userId', as: 'profile' }); Profile.belongsTo(User, { foreignKey: 'userId', as: 'user' });
执行上面的操作时,需要注意:
User 的主键 id 和 Profile 中的关联外键 userId 的类型和属性必须完全一致。
在 associate 函数中,建立的关系必须是彼此呼应的,所以在我们上面使用的 User.hasOne(Profile) 的例子中,Profile.belongsTo(User) 为它的“镜像”。
在 User 和 Profile 两个模型中,as 属性必须按照上面的写法进行命名,否则方法会失败。
“hasOne”关系适用于主键与外键建立一对一关系的情况;“belongsTo”适用于两个表之间存在“多对一”的情况。
在实际的应用中,我们会发现,有时需要建立多对一的外键,如建立一个文章表 articles 及其作者 users,该数据集中 articles 表有一个 userId 外键对应于 users 表的主键 id。这种情况下可以使用 belongsTo 方法:
Article.belongsTo(User, { foreignKey: 'userId', targetKey: 'id' });
在以上代码中,我们还可以看到 targetKey 参数,如果没有手动指定,它将默认为 User 模型的主键 id。当我们的 User 模型中主键不是 id,而是 uid 的时候,我们需要手动指定 targetKey 参数:
-- -------------------- ---- ------- ---- - ------------------------ - ---- - ----- ------------------ ----------- ----- -------------- ----- ---------- ----- -- ----- ----------------- ------ ----------------- --------- ---------------- --- ----------------------- - ----------- --------- ---------- ----- ---
总结
在本文中,我们介绍了 Sequelize 中 associate 方法的作用及用法,展示了如何正确建立多个模型之间的关系,实现外键的建立及关联方式的指定。使用 Sequelize 可以让我们摆脱 SQL 语言的细节,快速建立数据模型的映射,提高应用程序的可维护性和可靠性。
参考链接
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e4fb62f6b2d6eab30756ef