web-dev-qa-db-ja.com

sequelizeで値をNULLに.update()する方法

PostGresのsequelizeを使用して行を更新するサービスを書いています。 PSequelを使用してクエリを試してみると、正常に機能します。

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

しかし、sequelizeを使用すると、500エラーがスローされます。

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

私のモデルではallowNullを実行していますが、これはnull値をデフォルトとして設定することを可能にするものだと思います:

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

NULL以外の値はすべて期待どおりに機能します。 null値を設定する別の方法はありますか?

13
jerrylow

その見た目から、私はあなたの問題はあなたがJS構文( 'null')を使うべきであるところにSQLのnull値( 'NULL')の構文を使っていることだと思います。

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

うまくいくはずです。

10
Robert Taussig

ログでより詳細なエラーメッセージを確認しましたか?エラーをキャッチするプロミスを追加してから、質問を更新することをお勧めします。

今のところ、あなたはomitNull: trueとの接続を作成したと思います。 nullプロパティを1つだけ持つ更新関数を呼び出すと、不完全なUPDATEコマンド(SETなし)が生成されるため、おそらくエラー500の原因です。

omitNull: falseを設定するか、このテストを実行できない場合は、次のように更新してください。

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

詳細 ここ

0
Michel Milezzi