为什么我要使用SQLite从更新解析器获取更新的数据,但不能获取postgress?另外,如果重要的话,我正在将Sequelize用于ORM。
关于Apollo和数据库的一般问题。基本上,我有一个更新用户解析器,用于更新用户的某些字段并返回该用户。使用SQLite时,返回的数据是正确的更新用户。但是,当我切换到postgres时,数据总是落后1个更新吗?因此,当我最初使用postgres来更新用户时,没有任何变化,但是下次我更新它时,我会从先前的更新中获取数据,依此类推。我很困惑,因为我没有更改任何代码,仅更改了它使用的数据库。在不同的数据库中,Apollo的行为是否有所不同?或者,postgress与sqlite的行为是否有所不同?
// model
"use strict";
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define(
"User",
{
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
firstName: DataTypes.STRING,
lastName: DataTypes.STRING,
userType: DataTypes.STRING,
},
);
User.associate = function(models) {
};
// typeDef
type User {
id: ID!
firstName: String
lastName: String
userType: String
createdAt: String
updatedAt: String
}
// resolver
async updateUser(
root,
{
id,
firstName,
lastName,
userType,
},
{ models }
) {
models.User.update(
{
firstName: firstName,
lastName: lastName,
userType: userType,
},
{
where: { id: id }
}
);
return models.User.findByPk(id);
},
//query
mutation {
updateEmployee(
id: 1
firstName: "testName"
lastName: "testUpdate"
employeeID: "12345"
){
id
firstName
lastName
employeeID
createdAt
updatedAt
}
}
答案 0 :(得分:1)
您不是在等待update
通话,因此findByPk
会在update
通话有机会完成之前返回用户。
await models.User.update( // <-- here
{
firstName: firstName,
lastName: lastName,
userType: userType,
},
{
where: { id: id }
}
);
return models.User.findByPk(id);
FWIW,如果您使用的是Postgres,则可以通过提供一个returning
选项来使用一个呼叫:
const [_, user] = await models.User.update(
{
firstName: firstName,
lastName: lastName,
userType: userType,
},
{
where: { id: id },
returning: true,
}
);
return user;