.replaceCollection()
替换指定集合的所有成员(例如,博客文章 #4 的 comments
)。
await Something.replaceCollection(parentId, association)
.members(childIds);
参数 | 类型 | 详情 | |
---|---|---|---|
1 | parentId | 父记录的主键值(即 id)。 必须是数字或字符串(例如 '507f191e810c19729de860ea' 或 49 )。或者,可以指定一个数字或字符串数组(例如 ['507f191e810c19729de860ea', '14832ace0c179de897'] 或 [49, 32, 37] )。在这种情况下,子记录将在每个父记录中被替换。 |
|
2 | association | 复数(“集合”)关联的名称(例如,“pets”) | |
3 | childIds | 将成为关联新成员的子记录的主键值(即 id)。请注意,这不会创建这些记录或销毁旧的记录,它只是将记录附加到/分离到指定的父项。 |
名称 | 类型 | 何时 |
---|---|---|
UsageError | 如果传入无效内容,则抛出此错误。 | |
AdapterError | 如果数据库适配器中出现错误,则抛出此错误。 | |
Error | 如果发生任何其他意外情况,则抛出此错误。 |
有关在 Sails 和 Waterline 中协商错误的示例,请参阅概念 > 模型和 ORM > 错误。
对于用户 3,用宠物 99 和 98 替换“pets”集合中的所有宠物
await User.replaceCollection(3, 'pets')
.members([99,98]);
- 此方法可与
await
、promise 链或传统的 Node 回调一起使用。- 如果关联是“双向”(表示它具有
via
),则子记录将相应地修改。如果另一侧的属性是单数,则每个新链接或断开链接的子记录的外键将被更改。如果是复数,则每个子记录的集合将相应地修改。- 此外,如果
via
指向另一侧的单数(“模型”)属性,则.addToCollection()
将在必要时“窃取”这些子记录。例如,假设您有一个 Employee 模型,它具有以下复数(“集合”)属性:involvedInPurchases: { collection: 'Purchase', via: 'cashier' }
。如果您执行Employee.addToCollection(7, 'involvedInPurchases', [47])
将此购买分配给员工 #7(Dolly),但购买 #47 已经与其他员工(例如 #12,Motoki)关联,则这将从 Motoki 处“窃取”购买并将其交给 Dolly。换句话说,如果您执行Employee.find([7, 12]).populate('involvedInPurchases')
,Dolly 的involvedInPurchases
数组将包含购买 #47,而 Motoki 的则不会。