gpt4 book ai didi

sql - Waterline ORM 相当于在重复键更新时插入

转载 作者:搜寻专家 更新时间:2023-10-31 22:56:14 25 4
gpt4 key购买 nike

我有一个表 user_address,它有一些字段,例如

attributes: {
user_id: 'integer',
address: 'string' //etc.
}

目前我这样做是为了插入一条新记录,但如果该用户存在一条记录,请更新它:

UserAddress
.query(
'INSERT INTO user_address (user_id, address) VALUES (?, ?) ' +
'ON DUPLICATE KEY UPDATE address=VALUES(address);',
params,
function(err) {
//error handling logic if err exists
}

有没有什么方法可以使用 Waterline ORM 而不是直接的 SQL 查询来实现相同的目的?我不想进行两次查询,因为它效率低下且难以维护。

最佳答案

上面的答案不太理想。它还将方法作为模型属性的一部分,这是不正确的行为。

这是理想的 native 解决方案的样子,它像任何其他水线模型函数一样返回 promise :

module.exports = {
attributes: {
user_id: 'integer',
address: 'string'
},
updateOrCreate: function (user_id, address) {
return UserAddress.findOne().where({user_id: user_id}).then(function (ua) {
if (ua) {
return UserAddress.update({user_id: user_id}, {address: address});
} else {
// UserAddress does not exist. Create.
return UserAddress.create({user_id: user_id, address: address});
}
});
}
}

然后你可以像这样使用它:

UserAddress.updateOrCreate(id, address).then(function(ua) {
// ... success logic here
}).catch(function(e) {
// ... error handling here
});

关于sql - Waterline ORM 相当于在重复键更新时插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19864778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com