字段名称与db中的列名称不同

时间:2019-05-22 17:32:47

标签: node.js graphql


我刚开始在MySQL中使用graphql,我想知道是否可以在graphql查询中使用与数据库中列名称不同的名称。
例如,我有一个带有用户名和密码列的表用户,当我定义架构的类型时,我具有以下内容:

const unidadesMedidaInternaType = new GraphQLObjectType({
    name: 'unidadesMedidaInterna',
    fields: () => ({
        userName: { type: GraphQLID },
        password: { type:GraphQLString }
    })
});

解析器:

resolve (parent, args) {
    return pool.query(`SELECT * FROM users`);
}

所以我必须这样查询:

{
  users {
     userName,
     password
  }
}

我想在查询中使用不同的名称,如下所示:

{
  users {
     Name,
     secret
  }
}

我尝试更改类型定义中的字段名称,但查询结果中充满了空值。

1 个答案:

答案 0 :(得分:0)

为了在查询中使用不同的名称,您有2个选项:

选项1 :使用aliases运行查询: 您可以使用类似

的别名来运行查询
{
  users {
     Name: userName,
     secret: password
  }
}
  

在这种情况下,您只是在执行时重命名字段名称,因此原始名称仍然可以查询。

选项2:将查询结果映射到GraphQLObject类型。

首先重命名字段:

const unidadesMedidaInternaType = new GraphQLObjectType({
    name: 'unidadesMedidaInterna',
    fields: () => ({
        Name: { type: GraphQLID },
        secret: { type:GraphQLString }
    })
});

然后映射查询结果以匹配字段:

resolve (parent, args) {
    const result = pool.query(`SELECT * FROM users`);
    // If the result of the query is an array then you have to map its items
    return { Name: result.userName, secret: result.password }
}

希望有帮助。