【问题标题】:Apollo/GraphQL: Field Type to Use for Timestamp?Apollo/GraphQL:用于时间戳的字段类型?
【发布时间】:2017-04-26 16:33:48
【问题描述】:

我正在将一个值存储到 timestamp with time zone 类型的 postgres 字段中。我在 Apollo 模式中将该字段定义为 int,但在解析器中收到此错误消息:

列“apptDateTime”是带时区的时间戳类型,但表达式是整数类型

查找GraphQL data types,我还没有看到任何类型被引用为对应于时间戳类型的字段。

对于数据库中时间戳类型的字段,在 Apollo 模式中使用的正确字段类型是什么?

【问题讨论】:

标签: postgresql graphql apollostack


【解决方案1】:

我的突变工作包括一个带时区的时间戳类型字段。我通过将我的 apptDateTime 字段的架构从 Int 更改为 String,并传入一个 ISO 字符串来做到这一点。 Sequelize 和 Postgres 负责将其更改为带时区的 Timestamp 类型的字段。

2021 年更新:

这就是我这些天使用的东西。

续集:

  timeOfNonce: {type: Sequelize.DATE} 

架构:

 scalar DATETIME
 .....
 timeOfNonce: DATETIME

这些天我让 Sequelize 通过以下方式定义我的 SQL 表:

const deleteAllData_fromThisModel = false;
const alterThisTableToMatchDBConnectorsModel = true;

myDataModel.sync({force: deleteAllData_fromThisModel, 
                  alter: alterThisTableToMatchDBConnectorsModel}).then(err => {
    console.log('myDataModel has been synced')
}).catch(err => {
    throw err
});

【讨论】:

  • 你能展示一些你的代码吗?你不需要 : require('pg').types.setTypeParser(1114, function(stringValue) { return new Date(stringValue + "+0000"); // 例如,UTC 偏移量。使用任何你想要的偏移量。 });
【解决方案2】:

我发现这种方式可以处理表单中的输入,需要从客户端(输入表单)转换到服务器,以及从服务器到客户端(输入表单)

Graphql:

    updatedAt: String

续集:

    updatedAt: {  type: Sequelize.DATE },

Postgresql:

    "createdAt" timestamp(6) with time zone DEFAULT now(),

值转换到服务器:

  value  = dateToISO(value);

向客户端转换值:

  if ( isNil(value) ) {
    value = '';
  } else {
    value  =  value.toLocaleDateString() +' '+ value.toLocaleTimeString();
  }

帮手:

let dateToISO = function (dateString) {
  if (!dateString) {
    return null;
  }
  let p = dateString.split(/\D/g);
  /* It's up your date on input in this case come from DD-MM-YYYY
    for MM-DD-YYY use: return [p[1], p[2], p[0]].join('-'); */
  return [p[2], p[1], p[0]].join('-'); 

};

【讨论】:

    猜你喜欢
    • 2010-12-31
    • 2012-08-01
    • 2020-09-16
    • 2019-01-17
    • 2021-05-04
    相关资源
    最近更新 更多