Mysql
 sql >> база данни >  >> RDS >> Mysql

GraphQL - връща изчислен тип в зависимост от аргумента

Отговорът на Джо (добавете {"name":"ratio" , value:data.active/data.total} до резултата, след като резултатът бъде извлечен от базата данни) ще го направи, без да прави промени в схемата.

Като алтернативен метод или като по-елегантен начин да го направите в GraphQL, имената на полетата могат да бъдат посочени в самия тип, вместо да се предават като аргументи. И изчислете ratio чрез написване на разделител.

И така, схемата на GraphQL ще бъде:

Item {
  total: Int,
  active: Int,
  ratio: Float
}

type Query {
  items: [Item]
}

Клиентът посочва полетата:

{
  items {
    total 
    active 
    ratio
  }
}

И ratio може да се изчисли вътре в разделителя.

Ето кода:

const express = require('express');
const graphqlHTTP = require('express-graphql');
const { graphql } = require('graphql');
const { makeExecutableSchema } = require('graphql-tools');
const getFieldNames = require('graphql-list-fields');

const typeDefs = `
type Item {
  total: Int,
  active: Int,
  ratio: Float
}

type Query {
  items: [Item]
}
`;

const resolvers = {
  Query: {
    items(obj, args, context, info) {
      const fields = getFieldNames(info) // get the array of field names specified by the client
      return context.db.getItems(fields)
    }
  },
  Item: {
    ratio: (obj) => obj.active / obj.total // resolver for finding ratio
  }
};

const schema = makeExecutableSchema({ typeDefs, resolvers });

const db = {
  getItems: (fields) => // table.select(fields)
    [{total: 10, active: 5},{total: 5, active: 5},{total: 15, active: 5}] // dummy data
}
graphql(
  schema, 
  `query{
    items{
      total,
      active,
      ratio
    }
  }`, 
  {}, // rootValue
  { db } // context
).then(data => console.log(JSON.stringify(data)))


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да картографирате тип Enum в mybatis с помощта на typeHandler при вмъкване

  2. По-добре ли е да направите обединение в SQL или отделни заявки и след това да използвате php array_merge?

  3. Код на грешка:1305. ФУНКЦИЯ или ПРОЦЕДУРА не съществува

  4. Как да изберете име на домейн от имейл адрес

  5. Проблем с обединяването на Tomcat с Hibernate. Изчакване на MySQL