我刚开始在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
}
}
我尝试更改类型定义中的字段名称,但查询结果中充满了空值。
答案 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 }
}
希望有帮助。