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 }
}