Использование таблиц без поля ID для сервера GraphQL для Relay - PullRequest
0 голосов
/ 04 июня 2019

У меня есть устаревшая БД SQL с таблицами, которые не оптимизированы для Relay Modern, потому что ни одна из таблиц не имеет свойства

ID

Я использую Sequelize в качестве ORM и express-graphql в качестве слоя GraphQl.

Сиквелизировать слой:

const STAFF = sequelize.define('staff', {
    sid: {
        // set the primary key for the table
        primaryKey: true,
        type: Sequelize.INTEGER,
        autoIncrement: true,
        allowNull: false,
        unique: true
    },
    firstName: {
        type: Sequelize.STRING,
        allowNull: false
    }
}

Слой GraphQl:

const StaffType = new GraphQLObjectType({
  name: 'Staff',
  description: 'This is the GraphQl schema for the staff table',
  fields: () => ({
    sid: { type: GraphQLInt },
    firstName: { type: GraphQLString }
  })
})

Как видите, у этой таблицы есть уникальный ключ sid .

Мне интересно, есть ли способ создать псевдонимы для различных уникальных ключей на сервере, чтобы я мог использовать Relay Modern на стороне клиента и писать такие запросы:

{
  node(id: "4") {
    id
    ... on Staff {
      firstName
    }
  }
}

Вот как Реле должно сказать о полях:

Поддержка ретрансляции для идентификации объектов основана на сервере GraphQL, предоставляющем идентификаторы объектов стандартным способом. В запросе схема должна предоставлять стандартный механизм запроса объекта по идентификатору. В ответе схема предоставляет стандартный способ предоставления этих идентификаторов.

https://facebook.github.io/relay/graphql/objectidentification.htm

1 Ответ

0 голосов
/ 05 июня 2019

Попробуйте вместо StaffType:

const StaffType = new GraphQLObjectType({
  name: 'Staff',
  description: 'This is the GraphQl schema for the staff table',
  fields: () => ({
    id: {
      type: GraphQLID,
      resolve: (parent, args, ctx) => parent.sid
    },
    firstName: { type: GraphQLString }
  })
})

Здесь мы разрешаем поле id из входящего запроса GraphQL к нашему внутреннему полю sid.Проверьте этот учебник для получения дополнительной информации о распознавателях GraphQL в целом.

...