2 votes

Objection js mise à jour avec incréments +1

Comment puis-je mettre à jour une valeur dans la base de données en utilisant l'objection ? Ma requête SQL fonctionne parfaitement.

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

Mon code d'objection :

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

Le problème est dans patch({number:number+1}) Comment dois-je faire ?

3voto

Freewalker Points 177

On dirait que vous devez utiliser ref(). Le code tel que vous l'avez ne saura pas où trouver la valeur de "nombre+1".

Que pensez-vous de ça ?

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

Voir cet exemple dans la documentation d'objection.js :

Person
  .query()
  .patch({
    age: Person.query().avg('age'),
    firstName: Person.raw("'Jenni' || 'fer'"),
    oldLastName: ref('lastName')
  });

3voto

Sami Koskimäki Points 96

Vous pouvez utiliser le increment / decrement méthodes :

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

Si vous devez mettre à jour autre chose dans la même requête, vous pouvez utiliser raw

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

raw vient de const { raw } = require('objection')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X