我很欣赏这个问题已经被讨论过很多次了,但似乎无法使其适用于我的情况,我只是没有正确理解语法或正确实现。
现在我有一个非常简单的更新方法,可以更新1列,并通过其ID查找该用户
User.update = (id, value) => {
pool.query('UPDATE users SET membership_expiry_date = $2 where id = $1', [id, value], (err) => {
if (err) {
return console.error(err);
}
return console.log('User Updated');
});
};
await User.update(req.body.user_id, "value");
我有多个列想要更新,但不确定如何设置。每次更新时,根据要更新的信息,我可以有不同数量的列进行更新
答案 0 :(得分:1)
您可以将要传递的列作为对象传递,并动态构建查询。
User.update = (id, values) => {
let columns = Object.keys(values);
let params = [id];
let query = "UPDATE users SET ";
for(let i = 0; i < columns.length; i++) {
query = `${query}${columns[i]} = $${params.length + 1},`
params.push(values[columns[i]]);
}
query = `${query.substring(0, query.length-1)} WHERE id = $1`
console.log(query);
console.log(params)
};
await User.update("req.body.user_id", {columnToUpdate: "newValue"});