字段名与数据库中的列名不同
Posted
技术标签:
【中文标题】字段名与数据库中的列名不同【英文标题】:Field name different from column name in db 【发布时间】:2019-10-09 06:08:52 【问题描述】:我刚开始在 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】:为了在查询中使用不同的名称,您有 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
希望对你有帮助。
【讨论】:
以上是关于字段名与数据库中的列名不同的主要内容,如果未能解决你的问题,请参考以下文章
阿里规范 - MySQL 数据库 - ORM映射 - 3 - 强制不要用 resultClass 当返回参数,即使所有类属性名与数据库字段一一对应
用dataset做数据源时,让gridview显示的列名与数据库表中的字段名不同