在购物车管理系统中,用户有manyOrders,订单belongsTo是用户,在这种情况下,userID(PK of ' user‘Table)是' order’表中的FK。我尝试过这样做,但这会导致关联错误,即顺序与用户无关。
db.user.findAll({
include: [
{
model: db.order
}
]
})
.then(users => {
res.json(users)
});以下是模型:-
命令:-
'use strict';
var db = require('../models/index');
module.exports = function (sequelize, DataTypes) {
var order = sequelize.define('order', {
id: {
type: DataTypes.INTEGER,
allowNull: false,
primaryKey: true,
autoIncrement: true
},
userId: {
type: DataTypes.INTEGER,
allowNull: false
},
totalAmount: {
type: DataTypes.INTEGER,
allowNull: false
}
,
createdAt: {
type: DataTypes.DATE,
allowNull: true
},
updatedAt: {
type: DataTypes.DATE,
allowNull: true
}
}, {
classMethods: {
associate: function (models) {
order.belongsTo(models.user);
order.belongsToMany(models.products, { through: { model: models.orderProduct } });
// order.hasMany(models.orderProduct);
}
}
});
return order;
};使用者:-
'use strict';
var db = require('../models/index');
module.exports = function (sequelize, DataTypes) {
var user = sequelize.define('user', {
id: {
type: DataTypes.INTEGER(11),
allowNull: false,
primaryKey: true,
autoIncrement: true
},
name: {
type: DataTypes.STRING(255),
allowNull: false
},
email: {
type: DataTypes.STRING(255),
allowNull: false
},
password: {
type: DataTypes.STRING(255),
allowNull: false
},
address: {
type: DataTypes.STRING(255),
allowNull: true
},
contact: {
type: DataTypes.STRING(255),
allowNull: true
},
type: {
type: DataTypes.STRING(255),
allowNull: true
},
createdAt: {
type: DataTypes.DATE,
allowNull: true
},
updatedAt: {
type: DataTypes.DATE,
allowNull: true
},
}, {
activated: {
type: DataTypes.BOOLEAN,
allowNull: true
}
}, {
classMethods: {
associate: function (models) {
user.hasMany(models.order);
}
}
});
return user;
};以下是错误:-
Unhandled rejection Error: order is not associated to user!
at Model.validateIncludedElement (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\sequelize\lib\model.js:558:11)
at F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\sequelize\lib\model.js:440:29
at Array.map (native)
at Model.validateIncludedElements (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\sequelize\lib\model.js:436:37)
at Model.<anonymous> (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\sequelize\lib\model.js:1372:32)
at Model.tryCatcher (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\bluebird\js\release\util.js:16:23)
at Promise._settlePromiseFromHandler (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\bluebird\js\release\promise.js:512:31)
at Promise._settlePromise (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\bluebird\js\release\promise.js:569:18)
at Promise._settlePromise0 (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\bluebird\js\release\promise.js:614:10)
at Promise._settlePromises (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\bluebird\js\release\promise.js:693:18)
at Async._drainQueue (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\bluebird\js\release\async.js:133:16)
at Async._drainQueues (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\bluebird\js\release\async.js:143:10)
at Immediate.Async.drainQueues (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\bluebird\js\release\async.js:17:14)
at runCallback (timers.js:666:20)
at tryOnImmediate (timers.js:639:5)
at processImmediate [as _immediateCallback] (timers.js:611:5)发布于 2017-04-17 15:59:15
指定你的外键。你使用的那些键不会自动推导出来。
order.belongsTo(models.user, {foreignKey: 'userID'});
..
user.hasMany(models.order, {foreignKey: 'userID'});编辑:我重新检查了你的帖子,你的用户定义错了。最后一个“激活”字段在外部,关闭前一个对象。这就是为什么它没有读到你的社团。
updatedAt: {
type: DataTypes.DATE,
allowNull: true
},
}, {
activated: {
type: DataTypes.BOOLEAN,
allowNull: true
}
}, {
classMethods: {
associate: function (models) {
user.hasMany(models.order);
}
}
});应:
updatedAt: {
type: DataTypes.DATE,
allowNull: true
},
activated: {
type: DataTypes.BOOLEAN,
allowNull: true
}
}, {
classMethods: {
associate: function (models) {
user.hasMany(models.order);
}
}
});发布于 2017-04-17 16:38:25
尝尝这个。像这样修改您的关联:
order.belongsTo(models.user, {as : 'User'});
user.hasMany(models.order, {as : 'Orders'});在查询时:
db.user.findAll({
include: [{model: db.order, as: 'Orders'}]
})
.then(users => {
res.json(users)
});https://stackoverflow.com/questions/43454115
复制相似问题