.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 的则不会。