У меня возникла проблема с получением пользовательских заказов с использованием метода включения в .findOne. SQL-запрос правильный и возвращает 50 строк, но сиквелизация дает мне массив с одним объектом, содержащим пустые значения:
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';
Поэтому я также не понимаю, почему этот запрос использует "=", но запрос из include использует "IN()"