字段名与数据库中的列名不同

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 当返回参数,即使所有类属性名与数据库字段一一对应

podman mysql字段区分大小写吗

用dataset做数据源时,让gridview显示的列名与数据库表中的字段名不同

MYSQL数据库建表注意事项

Mybatis学习二(字段名与实体类属性名不相同/关联查询)

请问mysql数据类型是不是区分大小写?