如何从父类中的映射牢固地访问子结构?

问题描述

我有一个客户结构,在该结构中我有一个映射到另一个名为 CartItem 的结构。我有一个 addToCart 函数,我想在其中添加一个新的 CartItem 作为 Customer 结构中的子结构。这是我在 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)++;
        }
    }
}

解决方法

您可以在存储阵列上使用 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);