これは私のモデルである:Sequelizeで連想テーブルのデータを更新するための作業例?
以下
var Vote = sequelize.define('vote', {
title: {
type: Sequelize.STRING,
allowNull: false
},
description: {
type: Sequelize.TEXT
}
});
var Choice = sequelize.define('choice', {
choiceTitle: {
type: Sequelize.STRING,
allowNull: false
},
count: {
type: Sequelize.INTEGER,
length: 6
}
});
Choice.belongsTo(Vote);
Vote.hasMany(Choice, {onUpdate: 'cascade'});
は、可能な場合の「投票」引数を使用して、関連の「選択肢」テーブルを含むの投票 'テーブルを更新するためのコードである「(ストア)」これはすでに、アプリからの「選択肢」を含む更新された値を持つ投票の対象です。
store(vote, callback) {
return Vote.findById(vote.id, {
include: [
{
model: Choice,
as: 'choices'
}
]
}).then(function(resVote) {
resVote.choices[0].updateAttributes({count: 120}) // just to test if at least it gets written to db
.then(function(res) {
callback(null, res);
}).catch((err) => callback(err, null));
});
},
FYI:私はちょうどそれが動作しますが、万歳、それはPostgresの-DBにダウン書き込まれます場合は、単に確認するために、120に特定の選択肢の一つの属性を設定し、コードで(Jan Aagaardの返信のおかげで、少なくともUpdating attributes in associated models using Sequelizeに関連するテーブルの更新があります)。
私はSequelizeのドキュメントでは解決策を見つけられませんでした(少なくともいくつかはあります)。 'save()'、 'update()'または 'upsert()'を直接試みると、nullが許可されている場合は空のフィールドを持つまったく新しい行が作成され、nullが許可されない場合は失敗します。
テーブルのすべての(変更された)フィールドを更新するため、また可能であればSequelizeの関連テーブルを更新するには、どのような方法が推奨されますか?申し訳ありませんが、この質問は少し基本的ですが、私は今すぐに固執しており、このタスクの明確な答えが見つかりませんでした。
ありがとう、それが機能するようになりました。これは私に正しい方向を指摘しましたが、私はまだ投票の対象から正しい選択を得るのに苦労していますが、少なくとも今はさらに進んでいます。私がこれまでの実例を持っていれば、これを更新しておきます。 –
ようこそ。 –
私はそれをそのまま残しています。なぜなら、現在MongoDBをバックエンドとして使用しているからです。ネストされた要素を持つ文書をdbに取得するほうがずっと簡単です。それはHeroku上で無料ですので、postgresを使用してください。しかし、mongoDBを無料で提供していることがわかりました;-) –