→ 繰り返しフィールド内のフィールドを更新する場合は、繰り返しフィールド内のすべてのフィールドを指定する必要があります。
指定方法
例えば、以下のようなコンテンツで繰り返しフィールド内(products)の1つ目のtitle
のみ更新する場合を考えます。
{
"title": "タイトル",
"body": "<p>本文が入ります。</p>",
"products": [
{
"fieldId": "product",
"title": "更新前の商品Aの名前",
"body": "<p>商品Aの説明が入ります。</p>"
},
{
"fieldId": "product",
"title": "更新前の商品Bの名前",
"body": "<p>商品Bの説明が入ります。</p>"
}
]
}
1つ目のtitle
のみを更新する際のリクエストボディ
繰り返しフィールド内の特定のフィールドのみを更新する場合でも、すべてのフィールドを指定する必要があります。
{
"products": [
{
"fieldId": "product",
"title": "更新後の商品Aの名前",
"body": "<p>商品Aの説明が入ります。</p>"
},
{
"fieldId": "product",
"title": "更新前の商品Bの名前",
"body": "<p>商品Bの説明が入ります。</p>"
}
]
}
実装例
以下のコードは、コンテンツデータを取得した後、更新対象のデータのみを上書きすることで、全てのフィールドのデータを含んだオブジェクトを生成し、特定のフィールドのデータ更新を行なっています。
const prevContent = await client.getListDetail({
endpoint: "endpoint",
contentId: "contentId",
queries: {
fields: "id,products",
},
});
const indexToUpdate = 0;
const newTitle = "更新後の商品Aの名前";
const updatedProducts = prevContent.products.map((product, index) => {
if (index === indexToUpdate) {
return {
...product,
title: newTitle
};
}
return product;
});
await client.update({
endpoint:"endpoint",
contentId: prevContent.id,
content: {
products: updatedProducts
}
});
更新後のコンテンツ
他のフィールドの値を保ったまま、繰り返しフィールド内(products)の1つ目のtitle
のみ更新されます。
{
"title": "タイトル",
"body": "<p>本文が入ります。</p>",
"products": [
{
"fieldId": "product",
"title": "更新後の商品Aの名前",
"body": "<p>商品Aの説明が入ります。</p>"
},
{
"fieldId": "product",
"title": "更新前の商品Bの名前",
"body": "<p>商品Bの説明が入ります。</p>"
}
]
}
特定のフィールドのみ指定して更新をすると、指定していないフィールドには空値が入ります。