You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KnexPg update()方法无法更新数据问题求助

解决SailsJS中Knex Update不生效的问题

我来帮你排查修复这个update操作失效的问题,你的代码里有几个关键细节没处理对:

1. 错误混用了select()和update()方法

Knex的查询构建器中,select()是用来构造查询语句的,而update()属于写入操作,这两个方法不能像你这样链式混用。正确的做法是直接针对目标表初始化操作,不需要先调用select()。

2. 数据类型不匹配导致字段未更新

你的quantitiesLockedValue是字符串'false',但数据库中该字段是布尔类型(存储的是TRUE布尔值)。PostgreSQL处理布尔字段时,会把非空字符串默认判定为true——哪怕你传的是'false'字符串,数据库也会将其当成布尔true处理,自然看不到字段变化。

3. 缺少查询执行的触发步骤

Knex的查询构建器只是生成SQL语句,并不会自动执行,你需要调用.then()(Promise方式)或者await(异步函数方式)来触发实际的数据库请求。

修复后的代码示例

// 先把字符串类型的'false'转为布尔值false
const idValue = this.id;
const quantitiesLockedValue = this.quantitiesLocked === 'false' ? false : true;

// 直接初始化update操作,无需select()
const query = knexPg('MealTemplate as m')
  .where('m.id', idValue)
  .update({ quantitiesLocked: quantitiesLockedValue });

// 执行查询并处理结果
query.then(() => {
  console.log('更新成功');
}).catch(err => {
  console.error('更新失败:', err);
});

// 如果是在异步函数中,也可以用await:
// await query;

额外验证小技巧

  • 可以在执行前打印生成的SQL语句,确认逻辑是否正确:console.log(query.toString());,这样能看到最终发送给数据库的SQL,方便快速排查问题。
  • 检查this.id是否正确获取到了目标记录的ID,确保where条件能精准匹配到对应的行。

内容的提问来源于stack exchange,提问作者user3143105

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:22:48