web-dev-qa-db-ja.com

Sequelize-レコードを更新し、結果を返します

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);
    });

人物モデルが正常に更新されたかどうかに関係なく、情報を取得していません。変数の結果は、1つの要素(0 = 1)の配列です

レコードが更新されたかどうかをどのようにして確認できますか。

36

ここにあなたが探していると思うものがあります。

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から docs :promiseは、1つまたは2つの要素を持つ配列を返します。最初の要素xは常に影響を受ける行の数であり、2番目の要素yは実際に影響を受ける行です(options.returningtrueに設定されたpostgresでのみサポートされます)

Postgresを使用している場合、result[1].dataValuesで更新されたオブジェクトにアクセスできます。

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

65
nickang

Sequelizeの更新関数は、影響を受ける行の数(結果配列の最初のパラメーター)を返します。

更新された行を取得するには、findを呼び出す必要があります

models.People.update({OwnerId: peopleInfo.newuser},
    {where: {id: peopleInfo.scenario.id}})
    .then(() => {return models.People.findById(peopleInfo.scenario.id)})
    .then((user) => response(user).code(200))
    .catch((err) => {
         request.server.log(['error'], err.stack);
      });
9

アイテムを見つけてプロパティを更新し、保存するだけです。 save()の結果、dbへのUPDATEクエリが発生します

        const job = await Job.findOne({where: {id, ownerId: req.user.id}});
        if (!job) {
            throw Error(`Job not updated. id: ${id}`);
        }

        job.name = input.name;
        job.payload = input.payload;
        await job.save();

Postgresの場合:

Executing (default): UPDATE "jobs" SET "payload"=$1,"updatedAt"=$2 WHERE "id" = $3
3
David Dehghan

async-awaitでできること、特に入れ子になったPromiseを避けるためにできること

const asyncFunction = async function(req, res) {
    try {
        //update 
        const updatePeople = await models.People.update({OwnerId: peopleInfo.newuser},
                                    {where: {id: peopleInfo.scenario.id}})
        if (!updatePeople) throw ('Error while Updating');
        // fetch updated data
        const returnUpdatedPerson =  await models.People.findById(peopleInfo.scenario.id)
        if(!returnUpdatedPerson) throw ('Error while Fetching Data');
        res(user).code(200);
    } catch (error) {
        res.send(error)
    }
} 
2