GraphQL / Sequelize: псевдоним SQL - PullRequest
       11

GraphQL / Sequelize: псевдоним SQL

0 голосов
/ 01 декабря 2018

Используемые технологии:

  • Apollo-сервер-экспресс для graphQL
  • Сиквелиз для подключения к SQL Server

Я унаследовал базу данных, гдеполя не следуют никаким соглашениям об именах.В некоторых есть пробелы и специальные символы.Чтобы избежать каких-либо проблем, я использовал псевдоним SQL для этих полей в запросах распознавателя:

const productAttributes = [
  'SAP', 
  ['Unit/V', 'UnitVol']];

...

  Query: {
    product: async (parent, {SAP} , { models }) => {
      const result = await models.Product.find( {
        where: {
          SAP: SAP
        },
        attributes:productAttributes,
      });
      return result;
    },
...

Для схемы GraphQL задано следующее:

type Product {
    SAP: String!
    UnitVol: Int
}

При выполнении запроса с игровой площадкиполе «SAP», полученное из модели, хорошо заполнено, но псевдоним поля «UnitVol» установлен в нуль (см. изображение Результат GraphQL ).

Подробно,Sequelize хорошо выполняет следующий оператор SQL:

Executing (default): SELECT [SAP], [Unit/V] AS [UnitVol] FROM [product codes] WHERE [product codes].[SAP] = N'22736';

Описанный выше результат запроса возвращает значения с псевдонимом (extract of console.log (result)):

product codes {
  dataValues:
   { SAP: '22736',
     UnitVol: 9 }
 },

Итаккажется, что между псевдонимом SQL, возвращаемым распознавателем, и схемой graphQL отсутствует ссылка.Буду признателен за любую оказанную помощь.

1 Ответ

0 голосов
/ 07 декабря 2018

Я нашел решение:

Вместо того, чтобы возвращать результат сиквела, я возвращаю массив «datavalues» в результате:

return !result ? [] : result.dataValues;

Я должен был контролировать, что результат неnull (нет записи для запроса graphQL).Если у кого-то есть более четкий ответ, я буду рад его проверить!Благодарю.

...