Невозможно увеличить с помощью sequelize: «Столбец« 0 »отношения« пользователи »не существует» - PullRequest
4 голосов
/ 06 мая 2019

Я использую Sequelize 4.42.0 и PostgreSQL 11.2 и очень стараюсь, чтобы increment работал, я делаю, как описано в документации .

Я искал везде, но не могу найти решение. Я также пытался с:

await Users.update({ testIncrement: database.literal('testIncrement + 1') }, {
      where: { id: user.id }
})

код

Контроллер

export const test = async ({ body, user }, res) => {
  try {
    await Users.increment('testIncrement', { where: { id: user.id }})
  } catch(error) {
    console.log(error)
  }
}

Модель

const Users = database.define('users',
  {
    id: {
      primaryKey: true,
      type: Sequelize.UUID,
      defaultValue: Sequelize.UUIDV4
    },
    testIncrement: {
      defaultValue: 0,
      type: Sequelize.INTEGER,
    },
  }
)

export default Users

Ожидаемое

testIncrement для увеличения на 1

Результаты

error: column "0" of relation "users" does not exist
       at Connection.parseE (/Users/.../node_modules/pg/lib/connection.js:555:11)
       at Connection.parseMessage (/Users/.../node_modules/pg/lib/connection.js:380:19)
       at Socket.<anonymous> (/Users/.../node_modules/pg/lib/connection.js:120:22)
       at Socket.emit (events.js:189:13)
       at Socket.EventEmitter.emit (domain.js:441:20)
       at addChunk (_stream_readable.js:284:12)
       at readableAddChunk (_stream_readable.js:265:11)
       at Socket.Readable.push (_stream_readable.js:220:10)
       at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
     name: 'error',
     length: 121,
     severity: 'ERROR',
     code: '42703',
     detail: undefined,
     hint: undefined,
     position: '35',
     internalPosition: undefined,
     internalQuery: undefined,
     where: undefined,
     schema: undefined,
     table: undefined,
     column: undefined,
     dataType: undefined,
     constraint: undefined,
     file: 'analyze.c',
     line: '2346',
     routine: 'transformUpdateTargetList',
     sql:
      'UPDATE "users" SET "testIncrement"="testIncrement"+ 1,"0"=\'id\',"1"=\'testIncrement\',"2"=\'createdAt\',"3"=\'updatedAt\' WHERE "id" = \'adbe346a-b117-4f21-aa74-8a46d1ededae\' RETURNING *' }

Ответы [ 2 ]

0 голосов
/ 07 мая 2019

Хорошо, хорошо, новый Я обнаружил, какой кусок кода создавал проблему, плохо, это похоже на ошибку из sequelize:

https://github.com/sequelize/sequelize/issues/8612

TL; DR - Удаление этогов моей модели пользователей исправлена ​​проблема

defaultScope: {
  attributes: { exclude: ['password', 'email'] }
}
0 голосов
/ 06 мая 2019

Пожалуйста, попробуйте этот фрагмент, он должен работать.

Users.find({where: { id: user.id }})
    .then((user) => {
      if(user == null) console.log("Invalid user")
       return User.update({
            testIncrement: user.testIncrement + 1
          })
    })
    .then((updated) => {
        if(updated == false) console.log("Cannot be updated")
        return updated;
    })
...