Возражение js обновляется с шагом +1

Как я могу обновить значение в базе данных, используя возражения? Мой SQL-запрос работает отлично.

UPDATE "freePlace"
SET number = number-1
WHERE   date >= '2017-10-20'   AND date <= '2017-10-30' AND "idObject" = '1'

Мой код возражения:

FreePlace.query().patch({number:number+1}).where('date', '>=', startDate)
  .andWhere('date', '<=', endDate)
  .andWhere('idParking', '=', parkingId)

Проблема в патче ({номер: номер +1}), как мне нужно это сделать?

2 ответа

Вы можете использовать increment/decrement методы:

FreePlace.query()
  .increment('number', 1)
  .where('date', '>=', startDate)
  .andWhere('date', '<=', endDate)
  .andWhere('idParking', '=', parkingId)

Если вам нужно обновить что-то еще в том же запросе, вы можете использовать raw

FreePlace.query()
  .patch({
    number: raw('number + 1'),
    somethingElse: 42
  })
  .where('date', '>=', startDate)
  .andWhere('date', '<=', endDate)
  .andWhere('idParking', '=', parkingId)

raw происходит от const { raw } = require('objection')

Похоже, вам нужно использовать ref(). Код, который у вас есть, не будет знать, где взять значение "число +1".

Как насчет этого?

FreePlace.query().patch({number:ref('number')+1})
  .where('date', '>=', startDate)
  .andWhere('date', '<=', endDate)
  .andWhere('idParking', '=', parkingId)

Посмотрите этот пример из документации по objection.js:

Person
  .query()
  .patch({
    age: Person.query().avg('age'),
    firstName: Person.raw("'Jenni' || 'fer'"),
    oldLastName: ref('lastName')
  });
Другие вопросы по тегам