sql - 如何在 Knex.js 中表达“小于或等于”关系
问题描述
在我的后端,我将 KnexJS 与 PostgreSQL 一起使用,我必须使用其 SQL 构建器构建一个 Knex 函数,而无需使用原始 SQL。
这是我第一次使用 KnexJS,我遇到的问题很少。
我必须构建的内容如 SQL 示例所示
UPDATE
feed
SET
status = 'SOME_STATUS'
WHERE
created_at <= 'SOME_TIMESTAMP'
AND conversation_id = 'ID';
此 SQL 正在更新表提要所有列的状态以及满足两个条件的位置。
在 Knex 中,我尝试了我的想法的示例代码
answerPendingMessages(feeds) {
return this.tx(tableName).where({
conversationId,
createdAt <= timestamp // This not idea how to do in Knex ???
}).update({
status: 'ANSWERED'
})
}
在上述函数中,我关心的是如何将 where 部分实际转换为条件之一createdAt <= 'TIMESTAMP'
我知道我可以将 where 与对象一起使用,但不明白如何包含<=
此外,我应该updatedAt
使用新的时间戳更新该列,但此刻也阻止了我。
最终结果应该是所有满足条件的列都将状态更新为某种状态,并且还有一个新的 updatedAt 时间戳。
我不确定 Knex 是否有特定的方法可以这样做
解决方案
这个答案是为我之前的问题提供我的目标。我展示的脚本没有做任何事情,我不知道如何让它工作。
answerPendingMessages(feeds) {
if (isEmpty(feeds)) return Promise.resolve([]);
const { conversationId, createdAt } = feeds;
return this.tx(tableName)
.where(
columns.conversationId === conversationId,
columns.createdAt <= createdAt
)
.update({
[columns.status]: 'ANSWERED',
[columns.updatedAt]: new Date(),
});
}
这里应该发生的是更新一个我有两个条件但其中一个是“小于或等于”关系的表。
因为这个输出应该是满足 2 个条件的所有行都是更新状态列。
现在脚本没有失败,也没有成功盗版没有发生任何事情。
推荐阅读
- ios - 如何使用 swift 4 显示这样的 collectionView?
- delphi - Delphi 创建用户表单
- ruby-on-rails - nil:NilClass 的未定义方法“model_name”
- javascript - 如何从诺基亚健康 API 读取温度?
- android - 您如何检测用户何时关闭 Android 中的无障碍服务?
- python-3.x - python mongo db / 如何有效地修改和删除字典中的列表?
- angular - 如何获取 xhr.response.statuscode
- r - 在没有“for”的情况下跨行循环
- qt - Qt 中的未知模块:3danimation
- java - 未调用 LeaderSelectorListener 的 takeLeadership() 方法