Sequelize: обратитесь к внешнему ключу между двумя моделями - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь сослаться на внешний ключ между двумя моделями. но я получаю эту ошибку:

throw new AssociationError (`$ {source.name} .belongsToMany ($ {target.name}) требует сквозной опции, передать либо строку, либо модель` );

AssociationError [SequelizeAssociationError]: Order.belongsToMany (пользователь) требует сквозной опции, передать либо строку, либо модель

Я проверяю некоторые похожие вопросы, но это не помогло , Я начал работать с Sequelize сегодня, поэтому, пожалуйста, приведите пример ответа.

дБ. 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;
};

заказ. 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",
   {
   ...
   }
);

I получить эту ошибку:

Ошибка типа: не удается прочитать свойство 'assignToMany' с неопределенным значением

, продолжение: 5.21.6

1 Ответ

0 голосов
/ 20 апреля 2020

Я ответил на аналогичный вопрос здесь . Пожалуйста, посмотрите на это. Также обратите внимание на комментарии и ссылку в конце обсуждения. Если после прочтения у вас возникнут вопросы, не стесняйтесь задавать их в комментариях к этому ответу.

...