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

时间:2013-11-07 15:54:21

标签: mysql sequelize.js

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

1 个答案:

答案 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 分支