我正在使用sequelize.js作为ORM,我正在尝试定义两个对象之间的关系:Review和User。一个用户可以写/有很多评论。因此,一个评论总是属于一个用户。没有连接表,此信息保存在名为user_id的列中的Review对象中。
我尝试按如下方式定义关系:
Review.belongsTo(User, { foreignKey: 'user_id' });
User.hasMany(Review, { foreignKey: 'user_id', useJunctionTable: false });
现在我在Review上使用find,我想要包含用户对象。我是这样做的:
Review.find({
where: {
id: reviewId
},
include: [User]
});
我在“字段列表”中检索错误ER_BAD_FIELD_ERROR:未知列'user.user_id'。 Sequelize要求user
。user_id
,因为它以某种方式认为它应该这样做。真正有趣的是它以某种方式起作用,但现在不再起作用了。文档在这里不应该如此健谈,所以我不确定如何定义两个对象之间的关联,或者一般的belongsTo关系。也许你们中的任何人都可以帮助我。
答案 0 :(得分:0)
型号:tweetCreate: function (tweet, user) {
Tweet.create(tweet, function (err, tweet) {
user[0].tweets.push(tweet)
user[0].save()
console.log("Tweet saved.")
return Promise.resolve()
})
}
User.js
型号:module.exports = (sequelize, Sequelize) => {
const user = sequelize.define("User", {
name: Sequelize.STRING,
}, {
});
user.associate = function (model) {
}
return user;
};
Review.js
Controller.js
"use strict";
module.exports = (sequelize, Sequelize) => {
const Review = sequelize.define("Review", {
user_id: { type: Sequelize.INTEGER },
detail: { type: Sequelize.STRING },
}, {
})
Review.associate = function (model) {
Review.belongsTo(model.User, {
as: 'user',
foreignKey: 'user_id'
});
}
return Review;
};
输出
var r = await db.Review.findOne({
where: {},
include: ['user']
});
console.log(JSON.parse(JSON.stringify(r)))
{
id: 1,
user_id: 1,
detail: 'Test Review',
createdAt: '2021-03-09T16:43:09.000Z',
updatedAt: '2021-03-09T16:43:09.000Z',
user: {
id: 1,
name: 'Test User',
createdAt: '2021-03-09T16:43:09.000Z',
updatedAt: '2021-03-09T16:43:09.000Z'
}
}
https://github.com/nkhs/node-sequelize : "sequelize": "^6.5.0",
"mysql2": "^2.2.5",
Tested in Win10, mysql
分支