1. ホーム
  2. javascript

[解決済み] Sequelize - レコードを更新し、その結果を返す。

2023-08-02 14:10:48

質問

MySQLでsequelizeを使っています。例えば、私が行う場合。

models.People.update({OwnerId: peopleInfo.newuser},
        {where: {id: peopleInfo.scenario.id}})
        .then(function (result) {
            response(result).code(200);

        }).catch(function (err) {
        request.server.log(['error'], err.stack);
       ).code(200);
    });

Peopleモデルが正常に更新されたかどうかの情報が戻ってきません。変数の結果は、1つの要素、0=1を持つ単なる配列です。

レコードが更新されたかどうかを確実に知るにはどうしたらよいでしょうか。

どのように解決するのですか?

こんな感じです。

db.connections.update({
  user: data.username,
  chatroomID: data.chatroomID
}, {
  where: { socketID: socket.id },
  returning: true,
  plain: true
})
.then(function (result) {
  console.log(result);   
  // result = [x] or [x, y]
  // [x] if you're not using Postgres
  // [x, y] if you are using Postgres
});

Sequelizeより ドキュメント : プロミスは1つか2つの要素からなる配列を返します。最初の要素 x は常に影響を受ける行の数であり、2番目の要素 y は実際に影響を受ける行です (postgresでは options.returning に設定された true .)

Postgresを使用していると仮定すると、更新されたオブジェクトにアクセスするには、以下のようになります。 result[1].dataValues .

を設定する必要があります。 returning: true オプションを設定し、Sequelize にオブジェクトを返すように指示します。また plain: true はオブジェクトそのものを返すだけで、役に立たないかもしれない他の面倒なメタデータは返しません。