GraphQL/Sequelize:SQL 别名

Posted

技术标签:

【中文标题】GraphQL/Sequelize:SQL 别名【英文标题】:GraphQL/Sequelize : SQL alias 【发布时间】:2019-05-03 06:11:46 【问题描述】:

使用的技术:

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

从 Playground 执行查询时,来自模型的字段“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】:

我找到了解决办法:

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

return !result ? [] : result.dataValues;

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

【讨论】:

以上是关于GraphQL/Sequelize:SQL 别名的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL 嵌套突变 + Sequelize

用 graphql-sequelize 解决“IS A”关系

node.js graphql/sequelize 服务器为链接属性返回 null

meteor apollo graphql/sequelize 缓存查询结果,避免多次相同查询

从 SQL Server 中的视图中选择别名

[14]SQL 别名