取代此筆記錄的其中一個集合(例如「comments」)中的所有外部記錄。
PUT /:model/:id/:association
此動作會重設對屬於此記錄(「主要」或「父」記錄)特定集合成員的「外部」或「子」記錄的參考,並取代集合中任何現有的參考。
:id
與資料庫中存在的主要記錄不符,則會使用 res.notFound()
回應。via
),則外部記錄上的外鍵或集合也將會更新。參數 | 類型 | 詳細資訊 |
---|---|---|
model | 父記錄所屬模型的識別名稱。 例如: 'employee' (在 /employee/7/involvedinPurchases 中) |
|
id | 所需父記錄的主鍵值。 例如: '7' (在 /employee/7/involvedInPurchases 中) |
|
association | 集合屬性的名稱。 例如: 'involvedInPurchases' |
|
fks | 要用作此集合新成員的子記錄的主鍵值(通常是 id)。 例如: [47, 65] |
fks
參數應在 PUT 請求正文中發送,除非您是使用僅限開發的捷徑藍圖路由發出此請求,在這種情況下,您可以簡單地將其包含在查詢字串中,如?fks=[47,65]
。
假設您負責維護大型連鎖雜貨店的記錄,而收銀員 Dolly(員工編號 7)一直將大量購買計入自己的功勞,但實際上她只為兩位顧客結帳。由於雜貨店連鎖店的老闆非常寬容,Dolly 保住了她的工作,但現在您必須更新 Dolly 的 involvedInPurchases
集合,使其僅包含購買項目 #47 和 #65
PUT /employee/7/involvedInPurchases
[47, 65]
這會傳回父記錄 Dolly。請注意,她的記錄僅顯示她參與了購買項目 #47 和 #65
{
"id": 7,
"name": "Dolly",
"createdAt": 1485462079725,
"updatedAt": 1485476060873,
"involvedInPurchases": [
{
"amount": 10000,
"createdAt": 1485551132315,
"updatedAt": 1486355134239,
"id": 47,
"cashier": 7
},
{
"amount": 5667,
"createdAt": 1483551158349,
"updatedAt": 1485355134284,
"id": 65,
"cashier": 7
}
]
}
如果您為您的應用程式啟用了 WebSockets,那麼每個訂閱父記錄的客戶端都將收到一個 addedTo
通知,針對新集合中的每個子記錄(如果有的話)。
例如,繼續上面的例子,假設 Dolly 之前的 involvedInPurchases
包括購買項目 #65、#42 和 #33。所有訂閱 Dolly 員工記錄的客戶端(除了發出請求的客戶端)都將收到兩種通知:針對她之前未參與的購買項目(#47)的 addedTo
,以及針對她不再參與的購買項目(#42 和 #33)的 removedFrom
。
{
id: 7,
verb: 'addedTo',
attribute: 'involvedInPurchases',
addedIds: [ 47 ]
}
和
{
id: 7,
verb: 'removedFrom',
attribute: 'involvedInPurchases',
removedIds: [ 42, 33 ]
}
請注意,購買項目 #65 不包含在
addedTo
通知中,因為它已在 Dolly 之前的involvedInPurchases
列表中。
訂閱子記錄的客戶端會收到額外通知
假設 involvedInPurchases
具有 via
,那麼 updated
或 addedTo
/removedFrom
通知也將發送到訂閱我們剛連結或取消連結的任何購買項目的客戶端。
如果另一側 (Purchase) 上
via
連結的屬性也是複數(例如cashiers
),則將發送addedTo
或removedFrom
通知。否則,如果via
指向單數屬性(例如cashier
),則將發送updated
通知。
最後,可能會發送第三種通知
如果給予 Dolly 這個新的購買項目集合會從其他員工的 involvedInPurchases
中「竊取」任何項目,那麼任何訂閱這些其他被竊取員工記錄的客戶端(例如 Motoki,員工編號 12 和 Timothy,員工編號 4)都將收到 removedFrom
通知。(請參閱藍圖 > 從...移除)。
- 請記住,此藍圖會取代給定屬性的整個關聯記錄集。若要從集合中新增或移除單一關聯記錄,並保持集合的其餘部分不變,請使用「add」或「remove」藍圖動作。(請參閱 藍圖 > 新增至 和 藍圖 > 從...移除)。