Я работаю над приложением, в котором я хочу получать данные из двух таблиц.
USERS
и FEEDBACKS
Каждый пользователь имеет несколько отзывов, следовательно, от 1 до многих отношений между USERS
и FEEDBACKS
. Я использую Sequelize для моделирования. Я создал две модели следующего формата. ratedBy
в FEEDBACKS
указывает на id
из USERS
. Я также создал ассоциации между двумя таблицами.
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);
}
})