首页 文章

GraphQL / Sequelize:SQL别名

提问于
浏览
0

使用技术:

  • 用于graphQL的Apollo-server-express

  • Sequelize连接到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';

上面描述的Query结果返回带别名的值(console.log(result)的提取):

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

因此,似乎解析器返回的SQL别名与graphQL架构之间存在缺失的链接 . 任何帮助深表感谢 .

1 回答

  • 0

    我找到了解决方案:

    我没有返回sequelize结果,而是在结果中返回'datavalues'数组:

    return !result ? [] : result.dataValues;
    

    我必须控制结果不为null(graphQL请求没有条目) . 如果有人有更清洁的答案,我会很乐意测试它!谢谢 .

相关问题