Я использую ORM Waterline для взаимодействия с моей базой данных.
Я расширяю 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», и соответствующие поля будут обновлены для модели, которую я вызываю.
Я не могу получить доступ к методам запроса Waterline (например, .update ()) из экземпляра модели после того, как модель запрошена следующим образом:
database.models.users.findAll().where({'id':1).then((user)=>{
user.touch_user();
//user.update // does not work
});
Но только после запроса я получаю данные, связанные с записью. Я бы хотел, чтобы user.touch_user () увеличивал col_a в таблице пользователей, как показано ниже
database.models.users.findAll().where({'id':1).then((user)=>{
user.touch_user();
database.models.users.update(user.id, {'col_a':user.col_a+1});
});
Проблема с вышеизложенным состоит в том, что объект пользователя не точно отражает обновление таблицы.