knex.js - 如何在 bookshelfjs 查询生成器中结合和使用?
问题描述
我在弄清楚如何添加多个包含“或”查询的“和”查询时遇到问题
我最终想要的结果是这样的:
select * from model where attribute1 = value1 and (attribute2 = value2 or attribute3 = value2)
这是我目前正在尝试的代码:
let result = await new Model().query(qb => {
qb.where('attribute1', 'value1')
qb.where(function () {
this.where('attribute2', 'value2')
this.orWhere('attribute3', 'value2')
})
}).fetchAll()
但问题是查询只执行我写的第一个条件
如果我把括号'或'条件放在第一位,输出是:
select * from model where (attribute2 = value2 or attribute3 = value2)
如果我把正常条件放在第一位,输出是:
select * from model where attribute1 = value1
查询似乎没有用“和”语句“附加”(如果这是正确的词)
我知道,如果我使用正常的 where 语句,查询会“追加”
例子:
let result = await new Model().query(qb => {
qb.where('attribute1', 'value1')
qb.where('attribute2', 'value2')
}).fetchAll()
输出:
select * from model where attribute1 = value1 and attribute2 = value2
有什么建议么?
解决方案
看起来我在使用时查看了错误的查询qb.debug(true)
,它们非常相似。
上面的代码按预期工作。任何不便敬请谅解。
推荐阅读
- python - DocuSign 集成。是否可以在未经用户同意的情况下获得身份验证令牌。我想使用我的凭据在内部发送 docusign 信封电子邮件
- python - 如何在 Go 中使用协议缓冲区 FieldMask
- spring-boot - 如何在spring boot gradle项目中将时间戳附加到jar?
- android - 适用于 Android 的 AutoLink 撰写文本
- angular - 使用变量时,Angular Cloudinary 宽度不起作用
- typescript - 如何使用 JSDoc 记录元组?
- javascript - 如何使用 dayjs 将日期时间从一个时区转换为另一个时区
- node.js - nodejs运行单线程还是多线程?
- gitlab - Gitlab:通过提交自动关闭问题不起作用
- python - 用于数据处理的 Python 类设计