【问题标题】:Sequelize: refer a foreign key between 2 modelsSequelize:引用两个模型之间的外键
【发布时间】:2020-04-21 18:32:35
【问题描述】:

我正在尝试在 2 个模型之间引用外键。但我收到了这个错误:

throw new AssociationError(`${source.name}.belongsToMany(${target.name}) 需要通过选项,传递字符串或模型`);

AssociationError [SequelizeAssociationError]: Order.belongsToMany(User) 需要通过选项,传递字符串或模型

我检查了一些类似的问题,但没有帮助。 我今天开始使用 Sequelize,所以请举个例子来回答。

db.js

const fs = require("fs");
const path = require("path");
const Sequelize = require("sequelize");
const basename = path.basename(module.filename);
const db = {};

const sequelize = new Sequelize("name", "user", "password", {
    host: "localhost",
    dialect: "mysql",
    logging: false,
});

fs.readdirSync(__dirname).filter(file =>
    (file.indexOf(".") !== 0) &&
    (file !== basename) &&
    (file.slice(-3) === ".js"))
.forEach(file => {
    const model = sequelize.import(path.join(__dirname, file));
    db[model.name] = model;
});

Object.keys(db).forEach(modelName => {
    if (db[modelName].associate) {
        db[modelName].associate(db);
    }
});

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;

user.js

const Sequelize = require("sequelize");

module.exports = (sequelize, DataTypes) => {
    const User = sequelize.define("User",
        {
            id: {
                type: Sequelize.BIGINT,
                autoIncrement: true,
                allowNull: false,
                primaryKey: true,
            },
            email: Sequelize.STRING(60),
            password: Sequelize.STRING(60),
            fullName: {
                type: Sequelize.STRING(60),
                allowNull: true,
            },
        },
    );

    User.associate = function (models) {
        models.User.belongsToMany(models.Order);
    };

    return User;
};

order.js

const Sequelize = require("sequelize");

module.exports = (sequelize, DataTypes) => {
    const Order = sequelize.define("Order",
        {
            id: {
                type: Sequelize.BIGINT,
                autoIncrement: true,
                allowNull: false,
                primaryKey: true,
            },
            title: Sequelize.STRING(60),
            orderNumber: Sequelize.STRING(60),
            status: Sequelize.STRING(60),
            amount: Sequelize.STRING(60),
            trackingCode: Sequelize.STRING(60),
        },
    );

    Order.associate = function(models) {
        models.Order.belongsToMany(models.User);
    };

    return Order;
};

当我使用小写这样定义名称时:

const User = sequelize.define("user",
   {
   ...
   }
);
const User = sequelize.define("order",
   {
   ...
   }
);

我收到此错误:

TypeError: 无法读取未定义的属性“belongsToMany”

续集: 5.21.6

【问题讨论】:

    标签: mysql node.js sequelize.js


    【解决方案1】:

    我回答了类似的问题here。请看一下。还要注意 cmets 和讨论结束时的链接。 如果您在阅读后有任何问题,请随时在 cmets 中向他们提问。

    【讨论】:

    • 我检查了您提到的问题并更改了我的文件并收到了一个新错误。我改变了问题。
    • 在 hasMany 关联中表示一个 through 选项,如下所示: User.belongsToMany(Order, {through: 'UserOrder'});您似乎错过了链接用户和订单的 UserOrder 模型。
    猜你喜欢
    • 2018-11-11
    • 2017-08-08
    • 1970-01-01
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 2019-07-30
    • 2016-06-15
    相关资源
    最近更新 更多