1

我使用 sequelize.js 作为 ORM,我试图定义两个对象之间的关系:Review 和 User。一位用户可以撰写/拥有许多评论。因此,一条评论始终只属于一个用户。没有连接表,此信息保存在 Review 对象中名为 user_id 的列中。

我试图将关系定义如下:

Review.belongsTo(User, { foreignKey: 'user_id' });
User.hasMany(Review, { foreignKey: 'user_id', useJunctionTable: false });

现在我在 Review 上使用 find 并且我想包含 user 对象。我这样做使用:

Review.find({
    where: {
        id: reviewId
    },
    include: [User]
});

我检索错误

ER_BAD_FIELD_ERROR:“字段列表”中的未知列“user.user_id”。

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

4

1 回答 1

0

模型: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;
};

控制器.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-sequelizestack-19840471分支

于 2021-03-09T16:47:03.073 回答