问题描述
我有一个客户结构,在该结构中我有一个映射到另一个名为 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);