как повторить идентификатор для длины массива в nodeJS и knexJS - PullRequest
2 голосов
/ 24 марта 2019

Я хочу добавить массив элементов с одинаковым orderId, поэтому мне нужно повторить orderId для длины массива, как мне это сделать?

Мой код:

const handleOrdersPost = (req, res, db) => {
const { customerId, orderStatus, productId, quantity, price} = req.body;
    if (!customerId || !orderStatus || !productId || !quantity || !price) {
        return res.status(400).json('incorrect form submission');
    }

    db.transaction(trx =>{
        trx.insert({
            customerId: customerId,
            orderStatus: orderStatus,
            orderDate: new Date()
            })
        .into('orders')
        .returning('orderId')
        .then(orderId => {
            return trx('orderitem')
            .returning('*')
            .insert({
                orderId: orderId,
                productId: [productId],
                quantity: [quantity],
                price: [price]
                })
            .then(order => {
            res.json('success');
            })
        })
        .then(trx.commit)
        .catch(trx.rollback)
    })


    .catch(err => res.status(400).json('unable to submit order ' + err))
}

module.exports = {
    handleOrdersPost: handleOrdersPost
};

Когда я пытаюсь добавить несколько элементов, используя почтальон, я получаю сообщение об ошибке, в основном говоря, что я уже знаю, что мне нужно повторить идентификатор для длины массива, потому что он отлично работает только с однимпредмет, но он мне нужен для работы с несколькими предметами.

1 Ответ

0 голосов
/ 25 марта 2019

В одной транзакции будет и должна быть упорядочена куча идентификаторов элементов вставки, поэтому вам нужно зациклить ваш массив и сосчитать orderId

, чтобы ваш код мог выглядеть следующим образом:

const array = [];
db.transaction((trx) => {
  db.insert([])
  .into('orders')
  .transacting(trx)
  .then((ids) => {
    const orderItems = [];
    orderItems.forEach((item, index) => {
      item.orderId = ids[0] + index;
    });
    return db.insert(orderItems)
    .into('orderItem)
    .transacting(trx);
  })
  .then(trx.commit)
  .catch(trx.rollback);
})
...