Sequelize:错误:错误:Table 1没有关联到Table 2

我正在尝试使用sequelize创build以下关联,但我不断收到以下错误“错误:错误:客户没有关联到订单!”。 根据我在文档中find的内容,我有双向关联。 我对这个问题可能是困惑的,因为当我查看数据库表时,我可以看到外键。 对于这个例子,我试图拉取与特定订单相关的订单和客户。 从技术上讲,我可以做三个分离数据库拉,但这似乎效率不高,而不是联接。

'use strict'; module.exports = function(sequelize, DataTypes) { var user = sequelize.define('user', { username: DataTypes.STRING(30), //remove password: DataTypes.STRING(255), emailaddress: DataTypes.STRING(255), firstname: DataTypes.STRING(30), middlename: DataTypes.STRING(30), //remove lastname: DataTypes.STRING(30), approve: DataTypes.BOOLEAN, roles: DataTypes.STRING(50), isactive: DataTypes.BOOLEAN }, { classMethods: { associate: function(models) { // associations can be defined here this.hasMany(models.order); } } }); user.hook('afterCreate', function(usr, options) { //hash the password return user.update({ password: passwd }, { where: { id: usr.id } }); }); return user; }; 'use strict'; module.exports = function(sequelize, DataTypes) { var order = sequelize.define('order', { ponumber: DataTypes.STRING(30), //remove orderdate: DataTypes.DATE, shippingmethod: DataTypes.STRING(30), shippingterms: DataTypes.STRING(30), deliverydate: DataTypes.DATE, paymentterms: DataTypes.STRING(30), overridediscount: DataTypes.BOOLEAN, shippingaddress: DataTypes.STRING(30), shippingcity: DataTypes.STRING(30), shippingstate: DataTypes.STRING(20), shippingzipcode: DataTypes.STRING(10), isactive: DataTypes.BOOLEAN }, { associate: function(models) { // associations can be defined here this.belongsTo(models.user); this.belongsTo(models.customer); } }); order.hook('afterCreate', function(ord, options) { //generate po number return order.update({ ponumber: ponumbr }, { where: { id: ord.id }//, //transaction: options.transaction }); }); return order; }; 'use strict'; module.exports = function(sequelize, DataTypes) { var customer = sequelize.define('customer', { customernumber: DataTypes.STRING(30), //remove customerspecificationid: DataTypes.INTEGER, customertypeid: DataTypes.INTEGER, sportid: DataTypes.INTEGER, customername: DataTypes.STRING(20), //remove address: DataTypes.STRING(30), city: DataTypes.STRING(30), state: DataTypes.STRING(30), zipcode: DataTypes.STRING(30), ordercomplete: DataTypes.BOOLEAN, isactive: DataTypes.BOOLEAN }, { associate: function(models) { // associations can be defined here this.hasMany(models.order); } }); customer.hook('afterCreate', function(cust, options) { //generate the customer number return customer.update({ customernumber: custnumber }, { where: { id: cust.id } }); }); return customer; }; Here is the constructor and method inside of a repository class I want to join constructor(model){ super(model.order); this.currentmodel = model; } findById(id){ let that = this; return new Promise( function(resolve, reject) { that.model.find({ where: { id: id }, include: [ that.currentmodel.customer, that.currentmodel.user ] }) .then(function(order){ resolve(order); }) .catch(function(err){ reject(err); }) }); } 

我已经审查了文件,并search了互联网寻找解决这个问题,但我没有find任何答案。 有人能请我澄清一下我可能错过的东西吗?

对于上面的示例,我试图通过主键检索绑定到订单logging的用户和客户。 到目前为止,我发现的所有findBy场景都是获取绑定到客户和用户的订单列表。 我需要更改什么才能检索外键与此订单绑定的订单和客户?

问题可能在于你如何设置你的关联,请提及你的策略。

以下工作正常,如果您使用快速index.js文件设置,然后查询http://docs.sequelizejs.com/en/1.7.0/articles/express/

 'use strict'; module.exports = function(sequelize, DataTypes) { var customer = sequelize.define('customer', { customernumber: DataTypes.STRING(30), //remove customerspecificationid: DataTypes.INTEGER, customertypeid: DataTypes.INTEGER, sportid: DataTypes.INTEGER, customername: DataTypes.STRING(20), //remove address: DataTypes.STRING(30), city: DataTypes.STRING(30), state: DataTypes.STRING(30), zipcode: DataTypes.STRING(30), ordercomplete: DataTypes.BOOLEAN, isactive: DataTypes.BOOLEAN }, { associate: function(models) { // associations can be defined here models.customer.hasMany(models.order); } }); customer.hook('afterCreate', function(cust, options) { //generate the customer number return customer.update({ customernumber: custnumber }, { where: { id: cust.id } }); }); return customer; }; 'use strict'; module.exports = function(sequelize, DataTypes) { var order = sequelize.define('order', { ponumber: DataTypes.STRING(30), //remove orderdate: DataTypes.DATE, shippingmethod: DataTypes.STRING(30), shippingterms: DataTypes.STRING(30), deliverydate: DataTypes.DATE, paymentterms: DataTypes.STRING(30), overridediscount: DataTypes.BOOLEAN, shippingaddress: DataTypes.STRING(30), shippingcity: DataTypes.STRING(30), shippingstate: DataTypes.STRING(20), shippingzipcode: DataTypes.STRING(10), isactive: DataTypes.BOOLEAN }, { associate: function(models) { // associations can be defined here models.order.belongsTo(models.user); models.order.belongsTo(models.customer); } }); order.hook('afterCreate', function(ord, options) { //generate po number return order.update({ ponumber: ponumbr }, { where: { id: ord.id }//, //transaction: options.transaction }); }); return order; }; 'use strict'; module.exports = function(sequelize, DataTypes) { var user = sequelize.define('user', { username: DataTypes.STRING(30), //remove password: DataTypes.STRING(255), emailaddress: DataTypes.STRING(255), firstname: DataTypes.STRING(30), middlename: DataTypes.STRING(30), //remove lastname: DataTypes.STRING(30), approve: DataTypes.BOOLEAN, roles: DataTypes.STRING(50), isactive: DataTypes.BOOLEAN }, { classMethods: { associate: function(models) { // associations can be defined here models.user.hasMany(models.order); } } }); user.hook('afterCreate', function(usr, options) { //hash the password return user.update({ password: passwd }, { where: { id: usr.id } }); }); return user; }; 

// index.js文件你应该关联的路线

 var fs = require('fs') , path = require('path') , Sequelize = require('sequelize') , lodash = require('lodash') , sequelize = new Sequelize('sequelize_test', 'root', 'root') , db = {} fs.readdirSync(__dirname) .filter(function(file) { return (file.indexOf('.') !== 0) && (file !== 'index.js') }) .forEach(function(file) { var model = sequelize.import(path.join(__dirname, file)) db[model.name] = model }) Object.keys(db).forEach(function(modelName) { if (db[modelName].options.hasOwnProperty('associate')) { db[modelName].options.associate(db) } }) // sequelize.sync({force: true}) module.exports = lodash.extend({ sequelize: sequelize, Sequelize: Sequelize }, db) 

把上面的数据库代码分别在文件夹中的文件夹或任何你喜欢的名字,然后你可以使用你的查询

var db = require('./ db');

 db.order.find({ where: { id: 0 }, include: [ db.customer, db.user ] }) .then(function(order){ console.log(order) })