I am having problem with getting user orders using include in .findOne method. The SQL query is correct and its returning 50 rows but sequelize is giving me array with one object containing empty values:
orders:
[ Order {
dataValues: {},
_previousDataValues: {},
_changed: {},
_modelOptions: [Object],
_options: [Object],
__eagerlyLoadedAssociations: [],
isNewRecord: false } ]
There are my models:
- User:
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;
};
- Order:
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;
};
In my API i want to get user and his orders. So in the controller i am doing:
user.findOne({
where: { steamid: req.params.steamId },
include: [{
model: order,
as: 'orders',
limit: 50
}],
})
For the include sequelize does this query:
SELECT `id`, ... FROM `Orders` AS `Order` WHERE `Order`.`steamid` IN ('123456') LIMIT 50;
When i execute it i successfully get 50 rows but when i console log user.dataValues I get:
{ id: 1,
steamid: '123456',
name: 'TEST',
img: null,
balance: 40575,
orders:
[ Order {
dataValues: {},
_previousDataValues: {},
_changed: {},
_modelOptions: [Object],
_options: [Object],
__eagerlyLoadedAssociations: [],
isNewRecord: false } ] }
When I do user.getOrders() it is successfully giving me user orders but the query is a bit different than include query:
SELECT `id`, ... FROM `Orders` AS `Order` WHERE `Order`.`steamid` = '123456';
So I also don't understand why this query is using "=" but query from include is using "IN()"