javascript - 如何将 AND 和 OR 与 Knex 结合?
问题描述
我无法在 Knex 中创建以下 SQL 查询:
SELECT * FROM tasks WHERE (code = 'export') AND (status = 'failed' OR status = 'complete')
使用代码:
const queryResult = await this.db('tasks')
.select('*')
.where(async function () {
if ('code' in query) {
this.where('code', query.code)
}
if ('status' in query) {
if (isArray(query.status)) {
return query.status.map(status => this.orWhere('status', status))
} else {
this.andWhere('status', query.status)
}
}
})
.orderBy('created_at', 'DESC')
当提供多个状态的数组时,它会忽略“code = export”值并选择所有内容。
解决方案
const query = knex('tasks');
if ('code' in query) {
query.where('code', query.code);
}
if ('status' in query) {
query.where(builder => {
const statuses = isArray(query.status) ? query.status : [query.status];
for (let status of statuses) {
builder.orWhere('status', status);
}
});
}
const result = await query;
推荐阅读
- robotframework - 如何将字典创建包含在机器人框架中的运行关键字中
- javascript - 无法读取科尔多瓦中的属性“applicationDirectory”
- r - R传播ddply Fivenum结果
- python - Pydantic - 动态创建具有多个基类的模型?
- php - jquery 运行良好,但为什么没有数据发布在 db 中?
- laravel - 如何在两列上设置唯一的验证规则
- python - cassandra cqlengine中的varchar列类型
- java - java -cp 选项似乎在 Java 14 中不起作用(已启用预览版)
- asp.net-core - Ef core 用 null 移除子元素
- android - Android ActionBar 高度使用自定义布局