【问题标题】:How to define belongsTo and hasMany Relationship in Sequelize.js如何在 Sequelize.js 中定义 belongsTo 和 hasMany 关系
【发布时间】:2013-11-07 15:54:21
【问题描述】:

我正在使用 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”。

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

【问题讨论】:

  • 你测试的是什么版本?我刚刚用最新的master(v1.7.0-beta.1,它似乎工作正常
  • 我使用的是 2.0beta1 版本。我现在完全重新设计了所有关联之间的关联,它终于可以工作了!真的很容易出错:-)
  • 我知道这个问题现在已经很老了,但我有完全相同的问题。在重新设计关联时,您考虑了什么?有没有什么你误解了我也误解了? ;)
  • 除了 useJunctionTable 我仍然使用相同的关联定义,它仍然有效(现在使用 Sequelize 3.x)
  • 将近 3 年后我遇到了 3 个问题。有谁知道为什么会这样?

标签: mysql sequelize.js


【解决方案1】:

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

Controller.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-sequelize : stack-19840471 分支

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    • 2019-07-26
    • 1970-01-01
    • 2015-12-22
    相关资源
    最近更新 更多