bookshelf js save() 命令不更新 postgresql 数据库中的行

postgresqlJS

1个回答

写回答

jishwbhajk

2025-07-04 10:30

+ 关注

JS
JS

使用Bookshelf.JS进行数据库操作时,有时候可能会遇到一个问题,即使用save()命令无法更新PostgreSQL数据库中的行。在本文中,我们将探讨这个问题,并提供一些解决方案。

首先,让我们来了解一下Bookshelf.JS。它是一个在Node.JS中使用的ORM(对象关系映射)工具,用于简化数据库操作。它提供了一种方便的方式来执行数据库查询和操作,例如插入、更新和删除数据。

在Bookshelf.JS中,使用save()命令来保存或更新数据是很常见的操作。一般来说,这个命令会根据数据对象的ID来判断是执行插入还是更新操作。但是,在使用PostgreSQL数据库时,可能会遇到save()命令无法更新行的情况。

出现这个问题的原因是,PostgreSQL的save()命令默认情况下会将数据对象的ID视为自增长的序列,而Bookshelf.JS在执行插入操作时,并不会返回插入的行的ID。这导致了在执行更新操作时无法获取正确的ID,从而无法更新数据库中的行。

要解决这个问题,我们可以使用Bookshelf.JS的withRelated()方法来解决。这个方法允许我们在执行查询时,同时获取关联的数据。通过使用withRelated()方法,我们可以在执行插入操作后,获取到插入的行的ID,并将其保存起来。然后,我们再使用这个ID来执行更新操作,就可以成功更新数据库中的行了。

下面是一个示例代码,演示了如何使用withRelated()方法来解决这个问题:

Javascript

const User = bookshelf.Model.extend({

tableName: 'users',

posts: function() {

return this.hasMany(Post);

}

});

const Post = bookshelf.Model.extend({

tableName: 'posts',

user: function() {

return this.belongsTo(User);

}

});

// 创建一个新的用户

const user = new User({

name: 'John Doe',

emAIl: 'john@example.com'

});

user.save().then(function(savedUser) {

// 保存用户成功后,获取到插入的行的ID

const userId = savedUser.get('id');

// 使用获取到的ID执行更新操作

User.forge({ id: userId })

.save({ name: 'Jane Doe' }, { method: 'update' })

.then(function(updatedUser) {

console.log('更新用户成功');

})

.catch(function(error) {

console.log('更新用户失败:', error);

});

})

.catch(function(error) {

console.log('保存用户失败:', error);

});

在上述示例代码中,我们首先创建了一个新的用户对象,并使用save()命令将其保存到数据库中。保存成功后,我们通过get()方法获取到插入的行的ID,并将其保存在变量userId中。然后,我们使用这个ID执行更新操作,将用户名修改为'Jane Doe'。最后,我们通过then()方法和catch()方法来处理更新操作的结果。

解决Bookshelf.JS save()命令不更新PostgreSQL数据库行的方法

通过使用Bookshelf.JS的withRelated()方法,我们可以解决save()命令无法更新PostgreSQL数据库行的问题。通过获取插入行的ID,并将其保存再使用这个ID执行更新操作,我们可以成功更新数据库中的行。

本文介绍了Bookshelf.JS在使用save()命令时可能遇到的问题,以及解决这个问题的方法。希望本文对你在使用Bookshelf.JS进行数据库操作时有所帮助。

参考资料:

- Bookshelf.JS官方文档:JS.org/">https://bookshelfJS.org/

- PostgreSQL官方文档:https://www.PostgreSQL.org/

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号