GraphQL / Sequelize:SQL别名

时间:2018-12-01 06:56:02

标签: sequelize.js graphql apollo-server

正在使用的技术:

  • graphQL的Apollo-server-express
  • 顺序连接到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”被设置为null(请参见图像GraphQL result)。

详细来说,Sequelize可以很好地执行以下SQL语句:

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

上述查询结果返回带有别名的值(console.log(result)的摘录):

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

因此,似乎解析程序返回的SQL别名与graphQL模式之间缺少链接。任何帮助深表感谢。

1 个答案:

答案 0 :(得分:1)

我找到了解决方法:

我没有返回序列化结果,而是在结果中返回了“ datavalues”数组:

return !result ? [] : result.dataValues;

我必须控制结果不为null(graphQL请求没有条目)。如果有更清晰的答案,我将很乐意对其进行测试!谢谢。