【问题标题】:NodeJS Sequalize Table1 is not associated to Table2Node JS Sequelize Table 1 没有关联到 Table2
【发布时间】:2018-01-03 04:53:21
【问题描述】:

我有两个表 table1 和 table2。我想获取关系数据。我浏览了this URL,这与我的错误相同,但该解决方案不适用于我

module.exports = function (sequelize, DataTypes) {
var table1 = sequelize.define("table1", {
    table1Id: {type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true},
    image: {type: DataTypes.STRING},  
}, {
    timestamps: true,
    classMethods: {
        associate: function (models) {
            table1.belongsTo(models.table2, {
                onDelete: "CASCADE",
                foreignKey: {
                    name: "table2Id",
                    notEmpty: false
                }
            });
        }
    }
});
return table1;
};

另一个是:

module.exports = function (sequelize, DataTypes) {
var table2 = sequelize.define("table2", {
    table2Id: {type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true},
    name: {type: DataTypes.STRING}, 
}, {
    timestamps: true,
    classMethods: {
        associate: function (models) {
            table2.hasMany(models.table1, {
                onDelete: "CASCADE",
                foreignKey: {
                    name: "table1Id",
                    notEmpty: false
                }
            });
        }
    }
});
return table2;
};

然后在控制器中:

models.table2.findById(req.params.id, {
        include: [{model: models.table1}] 

    }).then(function (data) {


    }).catch(Sequelize.ValidationError, function (err) {
        return res.status(422).send(err.errors);
    }).catch(function (err) {
        console.log(err.message,"err.message")
        return res.status(400).send({
            message: err.message
        });
    });

我得到了 Table1 与 Table2 没有关联的错误

【问题讨论】:

  • 你在使用 MySQL 吗?还是 SQL Server?您可能没有同时使用两者。
  • 我使用mysql作为数据库
  • 怎么调用 associate 方法?我的猜测是关联方法没有正确调用其中的所有模型
  • 它在一个系统中工作正常,在另一个系统中不工作,所以我很困惑
  • 我有两个不同的系统,它可以完美地在一个系统中工作,但不能在另一个系统上工作,所以我认为这应该只是架构的问题,但无法找到解决方案

标签: javascript sql node.js orm sequelize.js


【解决方案1】:

如果你在续集 >4 定义关联的方式发生了变化。

而不是将关联定义为

const Model = sequelize.define('Model',
 { ... },
 { classMethods: { associate: function (model) {...} }
 });

它们现在被定义为

const Model = sequelize.define('Model', { ... });
 // Class Method
Model.associate = function (models) { ...associate the models };

这也可以解释为什么它似乎在一台机器上工作而不是在另一台机器上工作。

【讨论】:

  • 我在我的应用程序中使用了相同的代码,但它在某些系统中不起作用,而其他系统正在运行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-25
  • 1970-01-01
  • 2013-10-21
  • 1970-01-01
  • 2016-01-08
  • 1970-01-01
  • 2019-09-06
相关资源
最近更新 更多