Javascript 书架和where/orWhere语法问题

Javascript 书架和where/orWhere语法问题,javascript,node.js,model,bookshelf.js,Javascript,Node.js,Model,Bookshelf.js,这将工作并选择具有特定org\u id且isAdministrator等于1的记录 我想扩展这条。where行,这样它也可以选择员工和合作伙伴。我希望他使用以下代码: await bookshelf .model('User') .where({ org_id: this.get('id'), isAdministrator: 1 }) .fetchAll() .then... 但是,它只选择管理员和合作伙伴,而不选择员工。我做错了什么?问题是.query函数的

这将工作并选择具有特定
org\u id
isAdministrator
等于1的记录

我想扩展这条
。where
行,这样它也可以选择员工和合作伙伴。我希望他使用以下代码:

await bookshelf
    .model('User')
    .where({ org_id: this.get('id'), isAdministrator: 1 })
    .fetchAll()
    .then...

但是,它只选择管理员和合作伙伴,而不选择员工。我做错了什么?

问题是
.query
函数的参数:

await bookshelf
    .model('User')
    .query({
        where: { org_id: this.get('id'), isAdministrator: 1 },
        orWhere: { org_id: this.get('id'), isAssociate: 1 },
        orWhere: { org_id: this.get('id'), isPartner: 1 }
    })
    .fetchAll()
    .then...
无效,因为javascript对象不能有多个相同的键。改为:

bookshelf.model('User').query((queryBuilder)=>{
查询生成器
.where({org\u id:this.get('id'),isAdministrator:1})
.orWhere({org\u id:this.get('id'),isPartner:1})
.orWhere({org_id:this.get('id'),isAssociate:1});
}).fetchAll({debug:true}).then(函数(用户){
//...
})  


您可以提供调试选项以查看实际的查询,如下所示:
.fetchAll({debug:true})
。但是,在我自己进行了测试之后,我发现您的代码中没有错误,它成功地获取了
isAdministrator
为0且
isAssociate
为1的行。也许你应该分享完整的代码?或者数据库中缺少一行?生成的调试sql代码如下:
“从`users`中选择`users`.*,其中`org\u id`=”?和'isAdministrator`=?或者('org\u id`=?和'isAssociate`=?)
这对我来说很好。谢谢!这将返回:
“从`users`中选择`users`.*,其中`org\u id`=?”?和'isAdministrator`=?或者(`org\u id`=?和`isPartner`=?)”
。所以它似乎忽略了第一个
或where
…哦,有3个or子句,我没有看到。问题是
.query
函数的参数:
{where:{org\u id:this.get('id')、isAdministrator:1}、where:{org\u id:this.get('id')、isAssociate:1}、where:{org\u id:this.get('id')、isPartner:1}
是无效的javascript对象,因为javascript对象不能有多个相同的键。我相信有一些方法可以避免这种情况,我会将其作为答案发布。也许可以使用
.whereRaw
并编写正确的原始sql查询…谢谢!很好用!
{
        where: { org_id: this.get('id'), isAdministrator: 1 },
        orWhere: { org_id: this.get('id'), isAssociate: 1 },
        orWhere: { org_id: this.get('id'), isPartner: 1 }
}