编辑页面

关联

概述

#

除了像stringnumber这样的字面类型外,Sails 模型中的属性还可以表示数据存储中其他记录的链接。这种类型的属性称为关联。例如,给定一个User模型和一个Pet模型,User可以包含一个pets属性,该属性将给定的用户链接到一个或多个宠物。

设置关联的值
#

根据链接的类型,可以在.create().update()调用中通过赋予它另一条记录的主键值来设置关联属性,或者使用特殊的模型方法,如.addToCollection.removeFromCollection().replaceCollection()

检索记录中的关联
#

与普通属性不同,关联属性值在使用.find().findOne()检索记录时并不总是返回。相反,您可以使用.populate()方法声明要检索的关联。

// Find a single user, including its pets
var userWithPets = await User.findOne(123).populate('pets');

关联属性在返回的记录中如何表示取决于关联的类型、是否存在实际链接的记录以及是否将.populate()链接到查询。有关返回记录中关联属性的预期类型的完整描述,请参阅此表

跨适配器关联

#

使用 Sails 和 Waterline,您可以在多个数据存储之间关联模型。这意味着,即使您的用户驻留在PostgreSQL中,他们的评论驻留在MongoDB中,您也可以像它们驻留在同一个数据库中一样与数据进行交互。您还可以使用相同的适配器跨不同的数据存储建立关联。例如,如果您的应用程序需要访问/更新公司数据中心中某个地方的MySQL数据库中存储的旧版配方数据,但还需要从云中的全新 MySQL 数据库中存储/检索配料数据,这将非常方便。

重要说明

在教程和示例代码中,您有时可能会看到关联的collectionmodelthrough属性引用小写(标识)或大写(全局 ID)的模型。例如,在以下关联中,collection属性设置为product——称为Product的 Sails 模型的标识。

wishlist: {
 collection: 'product',
 via: 'wishlistedBy'
}

在 Sails 文档中,我们始终使用全局 ID 方法以确保一致性。但请注意,这两种方法都可以使用。

是否缺少内容?

如果您发现我们遗漏了某些内容或可以改进的地方,请遵循此链接并向 sails 存储库提交拉取请求。合并后,下次部署网站时,更改将反映在网站上。

概念