将一个外部记录(例如评论)添加到该记录的某个集合中(例如“评论”)。
PUT /:model/:id/:association/:fk
此操作将对某个记录的特定集合(“主”或“父”记录)添加对其他记录(“外部”或“子”记录)的引用。
:id
不对应数据库中存在的任何主记录,则此操作将使用res.notFound()
进行响应。:fk
不对应数据库中存在的任何外部记录,则此操作将使用res.notFound()
进行响应。via
),则指向该via
的外部键或集合也会在外部记录上更新。参数 | 类型 | 详细信息 |
---|---|---|
model | 父记录所属模型的 标识。 例如: 'employee' (在/employee/7/involvedinPurchases/47 中) |
|
id | 所需父记录的主键值。 例如: '7' (在/employee/7/involvedInPurchases/47 中) |
|
association | 集合属性的名称。 例如: 'involvedInPurchases' |
|
fk | 要添加到此集合的子记录的主键值(通常是 id)。 例如: '47' |
将采购 #47 添加到 Dolly(员工 #7)参与的采购列表中
PUT /employee/7/involvedInPurchases/47
此操作返回“Dolly”,即父记录。请注意,她现在参与了采购 #47
{
"id": 7,
"name": "Dolly",
"createdAt": 1485462079725,
"updatedAt": 1485476060873,
"involvedInPurchases": [
{
"amount": 10000,
"createdAt": 1485476060873,
"updatedAt": 1485476060873,
"id": 47,
"cashier": 7
}
]
}
$.put('/employee/7/involvedInPurchases/47', function (purchases) {
console.log(purchases);
});
$http.put('/employee/7/involvedInPurchases/47')
.then(function (purchases) {
console.log(purchases);
});
io.socket.put('/employee/7/involvedInPurchases/47', function (purchases) {
console.log(purchases);
});
curl https://127.0.0.1:1337/employee/7/involvedInPurchases/47 -X "PUT"
如果您的应用程序启用了 WebSockets,则每个订阅了主记录的客户端 订阅 将收到一条通知,其中通知事件名称为主模型标识(例如:'employee'
),消息具有以下格式
id: <the parent record primary key value>,
verb: 'addedTo',
attribute: <the parent record collection attribute name>,
addedIds: <the now-added child records' primary key values>
例如,继续上面的示例,所有订阅了 Dolly,即员工 #7 的客户端(*除了*发出请求的客户端)将收到以下消息
{
id: 7,
verb: 'addedTo',
attribute: 'involvedInPurchases',
addedIds: [ 47 ]
}
订阅子记录的客户端将收到额外的通知
假设involvedInPurchases
有一个via
,则updated
或addedTo
通知也将发送给任何 订阅 了采购 #47(我们刚刚添加的子记录)的客户端。
如果另一侧的
via
链接属性也为 复数(例如:cashiers
),则将发送另一个addedTo
通知。否则,如果via
指向一个单数属性(例如:cashier
),则将发送updated
通知。
最后,可能会发送第三个通知
如果将此采购添加到 Dolly 的集合中会从另一个员工的involvedInPurchases
中“偷走”它,则订阅了那个被偷走的员工记录(例如,Motoki,员工 #12)的任何客户端将收到removedFrom
通知(请参阅 蓝图 > 从中移除)。
- 如果您想花更多时间与 Dolly 交流,可以在 此处找到与上述示例相关的更详细的演练。
- 此操作用于处理 *复数*(“集合”)属性。如果您想设置或取消设置 *单数*(“模型”)属性,只需使用 更新 并将外部键设置为新外部记录的 id(或
null
以清除关联)。如果您想用另一组记录完全 *替换* 集合中的记录集,请使用 替换 蓝图。上面的示例假定“rest”蓝图已启用,并且您的项目至少包含一个名为 'Employee' 的模型,该模型具有属性:
involvedInPurchases: {collection: 'Purchase', via: 'cashier'}
,以及一个名为Purchase
的模型,该模型具有属性:cashier: {model: 'Employee'}
。您可以通过运行以下命令快速实现这一点$ sails new foo $ cd foo $ sails generate model purchase $ sails generate model employee
...然后编辑
api/models/Purchase.js
和api/models/Employee.js
。