【发布时间】:2020-01-11 09:17:36
【问题描述】:
我在使用 include in .findOne 方法获取用户订单时遇到问题。 SQL 查询是正确的,它返回 50 行,但 sequelize 给了我一个包含空值的对象的数组:
orders:
[ Order {
dataValues: {},
_previousDataValues: {},
_changed: {},
_modelOptions: [Object],
_options: [Object],
__eagerlyLoadedAssociations: [],
isNewRecord: false } ]
有我的模型:
- 用户:
module.exports = (sequelize, DataTypes) => {
var User = sequelize.define('User', {
steamid: DataTypes.STRING,
name: DataTypes.STRING,
img: DataTypes.STRING,
tradelink: DataTypes.STRING,
ban_chat: DataTypes.INTEGER,
block_sms: DataTypes.INTEGER,
balance: DataTypes.INTEGER,
ref: DataTypes.STRING,
refcode: DataTypes.STRING,
ip_address: DataTypes.STRING
}, {
timestamps: false
});
User.associate = function(models) {
// associations can be defined here
User.hasMany(models.Order,{
foreignKey: 'steamid',
sourceKey: 'steamid',
as: 'orders'
});
};
return User;
};
- 订单:
const customDataTypes = require('../../core').SequelizeTimestamp;
module.exports = (sequelize, DataTypes) => {
var Order = sequelize.define('Order', {
steamid: DataTypes.STRING,
item_name: DataTypes.STRING,
price: DataTypes.FLOAT,
type: DataTypes.STRING,
website: DataTypes.STRING,
amount: DataTypes.INTEGER,
status: DataTypes.INTEGER,
img: DataTypes.STRING,
send_attempts: DataTypes.INTEGER,
message: DataTypes.STRING,
date: customDataTypes.TIMESTAMP,
}, {
timestamps: false
});
Order.associate = function(models) {
// associations can be defined here
Order.belongsTo(models.User, {
foreignKey: 'steamid',
targetKey: 'steamid',
as: 'user'
})
};
return Order;
};
在我的 API 中,我想获取用户和他的订单。 所以在我正在做的控制器中:
user.findOne({
where: { steamid: req.params.steamId },
include: [{
model: order,
as: 'orders',
limit: 50
}],
})
对于包含续集执行此查询:
SELECT `id`, ... FROM `Orders` AS `Order` WHERE `Order`.`steamid` IN ('123456') LIMIT 50;
当我执行它时,我成功获得了 50 行,但是当我在控制台登录 user.dataValues 时,我得到:
{ id: 1,
steamid: '123456',
name: 'TEST',
img: null,
balance: 40575,
orders:
[ Order {
dataValues: {},
_previousDataValues: {},
_changed: {},
_modelOptions: [Object],
_options: [Object],
__eagerlyLoadedAssociations: [],
isNewRecord: false } ] }
当我执行user.getOrders() 时,它成功地给了我用户订单,但查询与包含查询有点不同:
SELECT `id`, ... FROM `Orders` AS `Order` WHERE `Order`.`steamid` = '123456';
所以我也不明白为什么这个查询使用“=”但是来自包含的查询使用“IN()”
【问题讨论】:
标签: node.js sequelize.js