【发布时间】:2021-10-02 13:41:56
【问题描述】:
看来我误解了 sequelize .hasMany() 和 .belongsTo() 关联以及如何在服务中使用它们。我有两个模型:
const User = db.sequelize.define("user", {
uid: { /*...*/ },
createdQuestions: {
type: db.DataTypes.ARRAY(db.DataTypes.UUID),
unique: true,
allowNull: true,
},
});
const Question = db.sequelize.define("question", {
qid: { /*...*/ },
uid: {
type: db.DataTypes.TEXT,
},
});
鉴于一个用户可以有很多问题并且每个问题只属于一个用户,我有以下关联:
User.hasMany(Question, {
sourceKey: "createdQuestions",
foreignKey: "uid",
constraints: false,
});
Question.belongsTo(User, {
foreignKey: "uid",
targetKey: "createdQuestions",
constraints: false,
});
我想要实现的是:在创建问题对象后,qid 应该驻留在"createdQuestions" 下的用户对象中——就像uid 驻留在uid 下的问题对象中一样。我认为 sequelize 关联会为我做的是保存个人调用和更新用户对象。有没有对应的方法?到目前为止我所拥有的是:
const create_question = async (question_data) => {
const question = { /*... question body containing uid and so forth*/ };
return new Promise((resolve, rejected) => {
Question.sync({ alter: true }).then(
async () =>
await db.sequelize
.transaction(async (t) => {
const created_question = await Question.create(question, {
transaction: t,
});
})
.then(() => resolve())
.catch((e) => rejected(e))
);
});
};
然而,这只会创建一个问题对象,但不会更新用户。我在这里错过了什么?
【问题讨论】:
标签: javascript node.js sequelize.js