Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

GraphQL - mengembalikan tipe terhitung tergantung pada argumen

Jawaban Joe (tambahkan {"name":"ratio" , value:data.active/data.total} ke hasil setelah hasilnya diambil dari database) akan melakukannya tanpa membuat perubahan skema.

Sebagai metode alternatif atau sebagai cara yang lebih elegan untuk melakukannya di GraphQL, nama bidang dapat ditentukan dalam tipe itu sendiri alih-alih meneruskannya sebagai argumen. Dan hitung ratio dengan menulis resolver.

Jadi, skema GraphQL akan menjadi:

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

type Query {
  items: [Item]
}

Klien menentukan bidang:

{
  items {
    total 
    active 
    ratio
  }
}

Dan ratio dapat dihitung di dalam resolver.

Ini kodenya:

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. Konfigurasi indeks MySQL

  2. Periksa apakah tabel MySQL ada atau tidak

  3. langkah akhir kueri sangat panjang pada waktu acak

  4. pilih dua baris terbaru untuk setiap pengguna untuk mendapatkan perbedaan kolom (MySQL)

  5. mysql:SUMBER kesalahan 2?