模型 'feedback' 未与模型 'user' - 续集(节点 JS)相关联



>我正在开发一个应用程序,我想从两个表中检索数据。

USERSFEEDBACKS

每个用户都有多个反馈,因此USERSFEEDBACKS之间的关系是一对多。我正在使用续集进行建模。我创建了两个模型,格式如下。FEEDBACKSratedBy指向USERSid。我还在两个表之间创建了关联。

const { sequelize } = require('../db_connection')
const Model = Sequelize.Model;
//Creating User model
class User extends Model { }
User.init({
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
},
name: {
type: Sequelize.STRING,
defaultValue: "",
allowNull: false
},
email: {
type: Sequelize.STRING,
allowNull: false
},
avatar: {
type: Sequelize.STRING,
allowNull: false
},
createdAt: Sequelize.DATE,
updatedAt: Sequelize.DATE,
}, { sequelize, modelName: 'user' })

//Creating Feedback model
class Feedback extends Model { }
Feedback.init({
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
comment: {
type: Sequelize.STRING
},
rating: {
type: Sequelize.INTEGER
},
ratedBy: {
type: Sequelize.INTEGER,
references: {
model: User,
key: 'id'
}
},
createdAt: Sequelize.DATE,
updatedAt: Sequelize.DATE,
}, { sequelize, modelName: 'feedback' })
User.associate = () => {
User.hasMany(Feedback, { as: 'ratedBy' })
}
Feedback.associate = () => {
Feedback.belongsTo(User, { foreignKey: 'ratedBy' });
}

模型可以成功迁移。当我尝试运行查询以从各个表中返回所有反馈和用户时,它只是抛出一个错误说Model 'feedback' is not associated with Model 'user'.

我经历了不同的StackOverflow答案,并尝试了不同的答案,但都是徒劳的。

const { User, Feedback } = require('./models')
//Migrate the User Model
User.sync({ alter: true })
//Migrate the Feedback Model
Feedback.sync({ alter: true })
const models = {
User, Feedback
};
Object.keys(models).forEach(model => {
console.log(models[model])
if ('associate' in models[model]) {
models[model].associate(models);
}
})

我已经尝试了一段时间并找到了解决方案。我只需要做一些小的改变。

我更改了与此的关联。

User.hasMany(Feedback, { foreignKey: 'ratedBy' })
Feedback.belongsTo(User, { foreignKey: 'ratedBy' });

将我的查询更改为:

Feedback.findAll({
attributes: ['comment', 'rating', 'createdAt', 'ratedBy'],
include: [{
model: User,
as: 'user',
attributes: ['name', 'avatar'],
}]
})
.then(feedbacks => res.send(feedbacks))

我还删除了每个模型的手动关联。

const models = {
User, Feedback
};
Object.keys(models).forEach(model => {
console.log(models[model])
if ('associate' in models[model]) {
models[model].associate(models);
}
})

最新更新