1

我使用 Apollo/graphql/sequelize 来获取以下关系:

我有多个标记。每个只有一种风格。标记可以使用相同的样式:

续集:

var Marker = db.define('markers', {
  name: {type: Sequelize.TEXT},
  idstyle: {type: Sequelize.INTEGER},
}, {timestamps: false});
const Markers = db.models.markers;

var Style = db.define('styles', {
  name: {type: Sequelize.TEXT},
  icon: {type: Sequelize.TEXT}
}, {timestamps: false});

Marker.belongsTo(Style, {foreignKey: 'idstyle'});

graphql 架构:

type Marker {
    id: Int
    name: String
    style: Style
}

type Style {
    id: Int
    name: String
    icon: String
}

type Query {
  marker(limit: Int, offset: Int): [Marker]
  style(limit: Int, offset: Int): [Style]
}

解析器:

Query: {
        async marker(root, args, context) {
            return Markers.findAll({limit: args.limit, offset: args.offset});
        },
        async style(root, args, context) {
            return Styles.findAll({limit: args.limit, offset: args.offset});
        }
    },
    Marker: {
        async style(marker) {
            return marker.getStyle();
        }
    }

当我运行以下查询时,我意识到似乎没有任何智能缓存:

query{
  marker{
    name
    style{
      name
    }
  }
}

即使它们已经作为另一个标记的结果返回,似乎也会再次查询相同的样式。您可以看到请求的样式 id 重复:

在此处输入图像描述

4

1 回答 1

0

使用数据加载器:

https://github.com/facebook/dataloader

这是与 Apollo 一起使用的示例:

https://github.com/apollostack/GitHunt-API/blob/106204c110980df28b70b565452a61648825d98b/api/github/connector.js

于 2016-11-13T04:39:53.743 回答