2

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

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

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

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

4

2 回答 2

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
});
于 2016-12-20T18:51:53.950 回答
1

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

图形:

    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('-'); 

};
于 2017-11-17T05:12:56.777 回答