我将一个值存储到类型为 的 postgres 字段中timestamp with time zone
。我在我的 Apollo 模式中将该字段定义为 int,但我在解析器中收到此错误消息:
列“apptDateTime”是带时区的时间戳类型,但表达式是整数类型
查找GraphQL 数据类型,我还没有看到任何类型被引用为对应于时间戳类型的字段。
对于数据库中时间戳类型的字段,在 Apollo 模式中使用的正确字段类型是什么?
我将一个值存储到类型为 的 postgres 字段中timestamp with time zone
。我在我的 Apollo 模式中将该字段定义为 int,但我在解析器中收到此错误消息:
列“apptDateTime”是带时区的时间戳类型,但表达式是整数类型
查找GraphQL 数据类型,我还没有看到任何类型被引用为对应于时间戳类型的字段。
对于数据库中时间戳类型的字段,在 Apollo 模式中使用的正确字段类型是什么?
我得到了我的突变工作,其中包括一个带时区的时间戳类型的字段。我通过将我的 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
});
我发现这种方式可以处理表单中的输入,需要从客户端(输入表单)转换到服务器,以及从服务器到客户端(输入表单)
图形:
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('-');
};