【问题标题】:Model 'feedback' is not associated to Model 'user' - Sequelize (Node JS)模型“反馈”与模型“用户”无关 - Sequelize(Node JS)
【发布时间】:2020-10-10 20:46:46
【问题描述】:

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

USERSFEEDBACKS

每个用户都有多个反馈,因此USERSFEEDBACKS 之间存在一对多关系。我正在使用 Sequelize 进行建模。我创建了两个模型,格式如下。 FEEDBACKS 中的ratedBy 指向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);
    }
})

【问题讨论】:

    标签: sequelize.js


    【解决方案1】:

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

    我把关联改成了这个。

    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);
        }
    })

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-26
      • 2020-01-29
      • 1970-01-01
      • 2016-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多