Javascript 无法查询Amplify数据存储中的多对多关系

Javascript 无法查询Amplify数据存储中的多对多关系,javascript,graphql,aws-amplify,amplifyjs,aws-amplify-sdk-js,Javascript,Graphql,Aws Amplify,Amplifyjs,Aws Amplify Sdk Js,我有两个多对多关系的模型。这2种型号是订单和产品。一个订单将有许多产品,产品将有许多订单 我的目标是:给定一个orderID,获取订单中productID的列表 因此,我按照这一点将订单分为OrderProducts、Order和Product,如下schema.graphql type Order @model @key(name: "byStore", fields: ["storeID"]) @auth(rules: [{allow: private

我有两个多对多关系的模型。这2种型号是
订单
产品
。一个
订单
将有许多
产品
产品
将有许多订单

我的目标是:给定一个
orderID
,获取
订单中
productID
的列表

因此,我按照这一点将订单分为
OrderProducts
Order
Product
,如下
schema.graphql

type Order @model @key(name: "byStore", fields: ["storeID"]) @auth(rules: [{allow: private, operations: [read, update, create, delete]}]) {
  id: ID!
  buyer_name: String
  order_total_amount: String
  products: [OrderProducts] @connection(keyName: "byOrder", fields: ["id"])
  created_at: AWSTimestamp
}

type OrderProducts @model @key(name: "byOrder", fields:["orderID", "productID"]) @key(name: "byProduct", fields:["productID", "orderID"]) @auth(rules: [{allow: private, operations: [read, update, create, delete]}]){
  id: ID!
  orderID: ID!
  productID: ID!
  order: Order! @connection(fields: ["orderID"])
  product: Product! @connection(fields: ["productID"])
}

type Product @model @key(name: "byStore", fields: ["storeID"]) @auth(rules: [{allow: owner, operations: [create, update, delete]}, {allow: public, provider: iam, operations: [read]}]){
  id: ID!
  product_name: String!
  product_price: String!
  created_at: AWSTimestamp
  orders: [OrderProducts] @connection(keyName: "byProduct", fields:["id"])
}
但当我像下面这样查询OrderProduct模型时,为了按OrderID获取产品列表:

import {  Product, OrderProducts } from '../models';

export const GetAllProductIdByOrderId = async (order) => {
    return await DataStore.query(OrderProducts, op => op.orderID("eq", order.id)) // this is actual orderID
}
我得到这个错误的结果是:

Error: Invalid field for model. field: orderID, model: OrderProducts
我尝试的是:

尝试1

我试图在
OrderProducts
中添加一个名为
getOrderByOrderIDByProductID
queryField
,如下所示:

type OrderProducts @model @key(name: "byOrder", fields:["orderID", "productID"], queryField: "getOrderByOrderIDByProductID") @key(name: "byProduct", fields:["productID", "orderID"]) @auth(rules: [{allow: private, operations: [read, update, create, delete]}]){
  id: ID!
  orderID: ID!
  productID: ID!
  order: Order! @connection(fields: ["orderID"])
  product: Product! @connection(fields: ["productID"])
}
然后,
amplify push
amplify codegen models
,在所有这些之后,我无法在我的文件中导入
getOrderByOrderIDByProductID
,并获得此错误

warn Attempted import error: 'getOrderByOrderIDByProductID' is not exported from '../models' (imported as 'getOrderByOrderIDByProductID').
所以我检查了我的
model/index.js
,它没有导出
getOrderByOrderIDByProductID
。所以我不知道我还能做什么

尝试2

我转到AppSync控制台,在我的查询部分看到了
getOrderByOrderIDByProductID
,然后我尝试运行此查询:

query MyQuery {
  getOrderByOrderIDByProductID(filter: {orderID: {eq: "8649a9da-9ea6-4a30-afe7-6b336a8f853d"}}) {
    items {
      order {
        buyer_name
        createdAt
        id
      }
    }
  }
}
然后我得到以下输出:

{
  "data": {
    "getOrderByOrderIDByProductID": null
  },
  "errors": [
    {
      "path": [
        "getOrderByOrderIDByProductID"
      ],
      "data": null,
      "errorType": "MappingTemplate",
      "errorInfo": null,
      "locations": [
        {
          "line": 2,
          "column": 3,
          "sourceName": null
        }
      ],
      "message": "Expression block '$[query]' requires an expression"
    }
  ]
}
我无法从查询中获得任何
productID
,也不知道结果的含义

我遵循了本文中提到的建议,并在github中进行了报告,如果您想阅读更详细的版本,可以阅读它

总结如下:

只有一个目标:给定一个
orderID
,给我一个
Order
productID
的列表

告诉我我做错了什么,如果可能的话,给我举个例子。因为我一直都在关注这个问题