2016-08-05 32 views
1

我使用Apollo/graphql/sequelize抓住以下關係:流星apollo graphql/sequelize緩存查詢結果,以避免多個相同的查詢

我有多個標記。每個只有一個樣式。標記可以使用相同的樣式:

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 
    } 
    } 
} 

看來,同樣的風格再次查詢,即使它們已經返回爲另一個標記的結果。你可以看到,所要求的風格IDS重複:

enter image description here

回答