web-dev-qa-db-fra.com

Comment .update () valeur à NULL en sequelize

J'écris mon service pour mettre à jour une ligne à l'aide de Sequelize for PostGres. Lorsque j'essaie ma requête avec un PSequel, cela fonctionne bien:

UPDATE "test_table" SET "test_col"=NULL WHERE "id"= '2'

Mais l'utilisation de sequelise génère une erreur 500:

db.TestTable.update({ testCol: NULL }, { where: { id: id } })
  .then((count) => {
    if (count) {
      return count;
    }
  });

Mon modèle permet allowNull, ce qui, je crois, permet aux valeurs NULL d'être les valeurs par défaut et définies:

testCol: {
  type: DataTypes.INTEGER,
  allowNull: true,
  defaultValue: null,
  field: 'test_col'
},

Toute autre valeur que NULL fonctionne comme prévu. Existe-t-il une méthode différente pour définir les valeurs NULL?

9
jerrylow

À première vue, je pense que votre problème est que vous utilisez la syntaxe SQL pour une valeur nulle ('NULL') dans laquelle vous devriez utiliser la syntaxe JS ('null').

db.TestTable.update({ testCol: null }, { where: { id: id } })
  .then((count) => {
    if (count) {
      return count;
    }
  });

devrait marcher.

7
Robert Taussig

Avez-vous vérifié un message d'erreur plus détaillé dans les journaux? Je vous suggère d'ajouter une erreur de capture de promesse, puis de mettre à jour votre question. 

Pour l'instant, je suppose que vous avez créé votre connexion avec omitNull: true. Appeler une fonction de mise à jour avec une seule propriété null est probablement la raison de l'erreur 500 car elle va générer une commande UPDATE incomplète (sans SET).

Essayez de définir omitNull: false ou, si vous ne pouvez pas faire ce test, essayez de mettre à jour de cette façon:

db.TestTable.testCol = null;
db.TestTable.save(['testCol']);

Plus d'infos ici .

0
Michel Milezzi