簡體   English   中英

用Knex查詢插入多行

[英]Insert multiple rows with Knex query

router.post('/', (req, res) => {
  // req.body = [1,2,3,4,5] (these are player ids)
  function createGame() {
      return knex.insert({'gameDate': new Date(), 'season_id': 1})
          .into('game') // creates new game with new id
          .returning('id') // return that new game id
      }
      .then(game_Id => {
          function createPlayerGameRow(game_id, req.body) { // req refer above
              req.body.forEach(id => {
                  return knex.insert({ 'player_id': id, 'game_id': game_id })
                     .into('player_game')
              })
          }
      })
})

這部分代碼必須分離查詢,其中第一個查詢createGame()在我的游戲表中創建一個新游戲。 這很好。

我在嘗試按第一個的承諾鏈接另一個查詢(createPlayerGameRow())時遇到問題。

該函數將觸發並循環遍歷id的數組,但不會將新行插入到我的player_game表中,以表示游戲1、2、3、4和5現在可以記錄一些統計信息。

我四處張望,沒有運氣來解決這個問題。 在將插入循環到player_game表中時,我一定做錯了。

弄清楚了:需要使用Promise.all()並將其映射到ID的數組上

router.post('/', (req, res) => {
  let player_ids = req.body.players
  queries.createGame()
    .then(game_id => {
      return Promise.all(player_ids.map(player_id => {
        return Promise.resolve(queries.createPlayerGame(game_id[0], player_id))
      }))
      .then(elem => {
        res.json({msgInside: elem})
      })
    })
    .catch(err => {
       res.json({msgErr: err})
    })
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM