私はウォーターラインORMを使用して自分のデータベースとインターフェイスしています。インスタンスメソッドからウォーターラインモデルを更新する
私は新しいオブジェクトにWaterline.Collectionsを拡張し、モジュールに割り当てています:
var Waterline = require('waterline');
var User = Waterline.Collection.extend({
...some fields...
attributes:{
col_a:{
type:'integer'
},
touch_user:function(){
// increment col_a and update in table
}
}
});
export = module.exports = User;
私は約束でそれらを操作し、その後、更新する必要がある特定のモデルを照会。
database.models.users.findAll().where({'id':1}).then(...model manipulation...)
私が頻繁に実行するタスクは、モデルにアクセスするたびにほとんどありません。このタスクをインスタンスに関連付けられた関数にカプセル化したいので、簡単な呼び出し「touch_user」と関連するフィールドが呼び出されたモデルのために更新されます。モデルはそのように照会された後
私はモデルインスタンスから(例えば.update()など)ウォーターラインクエリメソッドにアクセスすることはできませんよ。
database.models.users.findAll().where({'id':1).then((user)=>{
user.touch_user();
//user.update // does not work
});
をしかし、私はそれを照会するまでそうではないことレコードに関連付けられたデータを取得します。 Iは、上記の問題は、ユーザオブジェクトが正確にテーブルの更新を反映していないことである以下
database.models.users.findAll().where({'id':1).then((user)=>{
user.touch_user();
database.models.users.update(user.id, {'col_a':user.col_a+1});
});
と同様ユーザーテーブル内col_aをインクリメントする)(user.touch_userを希望。