Sequelize только рассмотреть одну ассоциацию за один раз - PullRequest
0 голосов
/ 06 ноября 2018

Я использую orm sequelizeJs для моделирования схемы базы данных в моем проекте nodeJs. БД является MySQL. У меня есть 03 модели, которые определены следующим образом:

        // Worker model
module.exports = (sequelize, DataTypes) => {
 const Worker = sequelize.define("Worker", {
    workerId: {
        type: DataTypes.INTEGER,
        primaryKey: true,
        autoIncrement: true,
        unique: true,
        allowNull: false
    }
}
//Will put workerId into Order
Worker.associate = function (models) {
        models.Worker.hasMany(models.Order, { foreignKey: "workerId", constraints: false });
    };
//Will put workerId into Sale
Worker.associate = function (models) {
    models.Worker.hasMany(models.Sale, { foreignKey: "workerId", constraints: false });
};

return Worker;
}
    // Order model    
module.exports = (sequelize, DataTypes) => {
const Order = sequelize.define("Order", {
        orderId: {
            type: DataTypes.INTEGER,
            primaryKey: true,
            autoIncrement: true,
            unique: true,
            allowNull: false
        }
}
// Will put workerId into Order
Order.associate = function (models) {
        models.Order.belongsTo(models.Worker, {
            foreignKey: "workerId",
            targetKey: "workerId",
            constraints: false
        });
    };
return Order;
}

// Sale model    
module.exports = (sequelize, DataTypes) => {
const Sale = sequelize.define("Sale", {
    saleId: {
        type: DataTypes.INTEGER,
        primaryKey: true,
        autoIncrement: true,
        unique: true,
        allowNull: false
    }
//Will put orderId into Sale
Sale.associate = function (models) {
        models.Sale.belongsTo(models.Order, { foreignKey: "orderId", constraints: false });
    };
// Will put workerId into Sale
Sale.associate = function (models) {
        models.Sale.belongsTo(models.Worker, { foreignKey: "workerId", constraints: false });
    };
return Sale;
}

Ассоциация 1-to-Many между Order и Worker работает (workerId импортируется в Order).

Однако я не могу заставить работать связь 1-to-1 между Sale и Worker и связь между Order и Sale одновременно. Это либо один на тот момент, который работает. Это означает, что я могу ТОЛЬКО получить orderId или workerId в модели Sale, но не оба, чего мне нужно достичь.

Мне нужны как 1-to-1 отношения между Sale & Order, так и между Sale & Worker.

Можете ли вы заметить что-то, что я мог пропустить или неправильно использовать? Спасибо

1 Ответ

0 голосов
/ 09 ноября 2018

Я узнал, что я делаю неправильно. Я создавал ассоциации в двух отдельных функциях с одинаковым именем associate. Я исправил это, переместив ассоциации в одну и ту же функцию, например так:

Sale.associate = function (models) {
        models.Sale.belongsTo(models.Order, { foreignKey: "orderId", constraints: false });

       // Will put workerId into Sale
        models.Sale.belongsTo(models.Worker, { foreignKey: "workerId", constraints: false });
    };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...