首页 > 解决方案 > 如何从 Parent 类中的映射中访问子结构?

问题描述

我有一个客户结构,并且在结构内我有一个映射到另一个名为 CartItem 的结构。我有一个 addToCart 函数,我想在 Customer 结构中添加一个新的 CartItem 作为子结构。这是我在 Solidity 合约上的代码。我想从我的 Javascript 文件中的子结构访问子结构。像这个 customer[i].cartItems 吗?因为我似乎无法访问子结构

// CUSTOMER
struct Customer {
    uint256 id;
    address owner;
    string name;
    string addressLocation;
    string phone;
    mapping(uint256 => CartItem) cartItems;
    uint256 itemCount;
}

mapping(uint256 => Customer) customers;
uint256 public customersCount;
struct CartItem {
    uint256 id;
    uint256 productId;
}
function addToCart(uint256 _id) public {
    uint256 i = 0;
    for (i = 0; i <= customersCount; i++) {
        if (customers[i].owner == msg.sender) {
            customers[i].cartItems[customers[i].itemCount].push(
                CartItem(customers[i].itemCount, _id)
            );
            (customers[i].itemCount)++;
        }
    }
}

标签: javascriptethereumsoliditysmartcontracts

解决方案


您可以push()在存储阵列上使用。但这customers[i].cartItems[customers[i].itemCount]是一个映射。因此,您可以使用以下代码段分配给它:

// `customers[i].itemCount` is the mapping key
// `CartItem(customers[i].itemCount, _id)` is the value

customers[i].cartItems[customers[i].itemCount] = CartItem(customers[i].itemCount, _id);

推荐阅读