gpt4 book ai didi

mysql - 如何在Sequelize.js 中定义belongsTo 和hasMany 关系

转载 作者:行者123 更新时间:2023-12-03 22:22:34 25 4
gpt4 key购买 nike

我使用 sequelize.js 作为 ORM,并且我试图定义两个对象之间的关系:Review 和 User。一个用户可以写/有很多评论。因此,一篇评论总是只属于一个用户。没有连接表,此信息保存在 Review 对象中名为 user_id 的列中。
我试图将这种关系定义如下:

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: Unknown column 'user.user_id' in 'field list'.


Sequelize 请求 useruser_id ,因为它以某种方式认为它应该这样做。真正有趣的是它以某种方式起作用,但现在不再起作用了。这里的文档不像它应该的那样健谈,所以我不确定如何定义两个对象之间的关联,或者一般的 belongsTo 关系。也许你们中的任何人都可以在这里帮助我。

最佳答案

型号:User.js

module.exports = (sequelize, Sequelize) => {
const user = sequelize.define("User", {
name: Sequelize.STRING,
}, {
});

user.associate = function (model) {
}

return user;
};
型号: Review.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;
};
Controller .js
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'
}
}
"sequelize": "^6.5.0", 
"mysql2": "^2.2.5",

Tested in Win10, mysql
https://github.com/nkhs/node-sequelize : stack-19840471 分支

关于mysql - 如何在Sequelize.js 中定义belongsTo 和hasMany 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19840471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com