Редактировать: у меня есть заказ с большим количеством предметов. Элементы имеют один порядок.
Цель состоит в том, чтобы запрос, который возвращает предыдущие значения для столбца элемента в виде массива с длиной предоставленного аргумента.
Так что, если у меня есть :
{
orders: [
{
orderDate: 1,
items: [
{
itemName: 'Item 1',
orderAmount: 2,
itemId: '1a'
},
{
itemName: 'Item 2',
orderAmount: 7,
itemId: '1b'
}
]
},
{
orderDate: '2',
items: [
{
itemName: 'Item 1',
orderAmount: 3,
itemId: '1a'
},
{
itemName: 'Item 2',
orderAmount: 6,
itemId: '1b'
}
]
},
{
orderDate: '3',
items: [
{
itemName: 'Item 1',
orderAmount: 4,
itemId: '1a'
},
{
itemName: 'Item 2',
orderAmount: 5,
itemId: '1b'
}
]
}
]
}
Я хотел бы запрос, который бы возвращал предыдущиеOrders (количество: 2) для возврата ...
orderDate: 3,
items: [
{
itemName: 'Item 1',
orderAmount: 4,
itemId: '1a'
previousOrders: [3, 2]
},
{
itemName: 'Item 2',
orderAmount: 5,
itemId: '1a'
previousOrders: [6, 7]
}
В настоящее время я работаю ...
previousOrders: async (item, { count }, { models }) => {
const previous = await models.Item.findAll({
attributes: ['id', 'orderAmount'],
where: {
itemId: item.itemId
},
include: [
{
attributes: [],
model: models.Order
}
],
order: [[models.Order, 'orderDate', 'desc']],
raw: true
})
const index = previous.findIndex(x => x.id === item.id)
const sliced = previous.slice(index + 1, index + count + 1)
const array = sliced.map(a => a.orderAmount)
while (array.length < count) {
array.push(0)
}
return array
Это работает, но я чувствую, что, возможно, есть гораздо более хороший способ сделать это с запросами и просто захотеть увидеть другие потенциалы.