Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
react-admin-graphql数据提供程序:如果graphqlapi只支持GET\u-ONE,如何实现GET\u-MANY?_Graphql_React Admin - Fatal编程技术网

react-admin-graphql数据提供程序:如果graphqlapi只支持GET\u-ONE,如何实现GET\u-MANY?

react-admin-graphql数据提供程序:如果graphqlapi只支持GET\u-ONE,如何实现GET\u-MANY?,graphql,react-admin,Graphql,React Admin,如果graphql API仅支持等效的“获取一个”,如何在react admin的“ra数据图形SQL”包中实现“获取多个”数据提供程序函数 我理解如何通过等待解析API调用的所有承诺来使用REST完成此操作,但是这里从buildQuery返回的应该是一个对象,该对象具有用于GraphQL查询的键,以及用于解析响应的函数的键 那么,在我们从数据提供程序返回结果之前,如何支持多个GraphQL查询,每个ID对应一个我们想要获取的ID呢?我遇到了同样的问题,并用这样的模式解决了这个问题:(在用户过滤

如果graphql API仅支持等效的“获取一个”,如何在react admin的“ra数据图形SQL”包中实现“获取多个”数据提供程序函数

我理解如何通过等待解析API调用的所有承诺来使用REST完成此操作,但是这里从
buildQuery
返回的应该是一个对象,该对象具有用于GraphQL查询的键,以及用于解析响应的函数的键


那么,在我们从数据提供程序返回结果之前,如何支持多个GraphQL查询,每个ID对应一个我们想要获取的ID呢?

我遇到了同样的问题,并用这样的模式解决了这个问题:(在
用户过滤器中查看
{ID:[ID]}
,这很重要)


@kurtko很抱歉没有及时回复。现在检查一下。找到了一个不需要更改GQL模式的变通方法(因为这是一个我无法更改的外部API)。 您需要更改
ra数据图ql
。基本上,您需要允许多个GQL查询,然后等待所有承诺解决并返回组合结果。通过使用
query
querys
可以指示ra data graphql运行单个或多个GQL查询。我修改index.js如下:

// GRAPHQL QUERY
    if (operation === 'query') {
      if (!query.queries) {
        // single GraphQL query
        const apolloQuery = {
          ...query,
          fetchPolicy: 'network-only',
          ...getOptions(otherOptions.query, aorFetchType, resource),
        };

        return client
          .query(apolloQuery)
          .then((response) => parseResponse(response))
          .catch((error) => Promise.reject(error.message));
      } else {
        // multiple GraphQL queries
        const prs = query.variables.map((variables) => {
          const { queries, ...rest } = query;
          const apolloQuery = {
            ...rest,
            query: queries,
            variables,
            fetchPolicy: 'network-only',
            ...getOptions(otherOptions.query, aorFetchType, resource),
          };
          return client.query(apolloQuery);
        });
        return Promise.all(prs)
          .then((responses) => parseResponse(responses))
          .catch((error) => Promise.reject(error.message));
      }
    }

你找到解决办法了吗?
// GRAPHQL QUERY
    if (operation === 'query') {
      if (!query.queries) {
        // single GraphQL query
        const apolloQuery = {
          ...query,
          fetchPolicy: 'network-only',
          ...getOptions(otherOptions.query, aorFetchType, resource),
        };

        return client
          .query(apolloQuery)
          .then((response) => parseResponse(response))
          .catch((error) => Promise.reject(error.message));
      } else {
        // multiple GraphQL queries
        const prs = query.variables.map((variables) => {
          const { queries, ...rest } = query;
          const apolloQuery = {
            ...rest,
            query: queries,
            variables,
            fetchPolicy: 'network-only',
            ...getOptions(otherOptions.query, aorFetchType, resource),
          };
          return client.query(apolloQuery);
        });
        return Promise.all(prs)
          .then((responses) => parseResponse(responses))
          .catch((error) => Promise.reject(error.message));
      }
    }