[英]Is it possible to use orWhereRaw more than once in a bookshelf.js query?
我正在尝试创建一个函数,该函数将允许用户通过多个参数进行搜索。 这是代码。
async function searchUsers(searchText) {
if(isNaN(searchText)){
searchText = "'%" + searchText + "%'";
} else {
searchText = searchText;
}
let results = await User.query({whereRaw: ' (`firstName` LIKE ' + searchText , orWhereRaw: '`lastName` LIKE ' + searchText
, orWhereRaw: '`username` LIKE' + searchText, orWhereRaw: '`providerId` =' + searchText + ")"}).fetchAll();
return results.toJSON();
}
现在,当运行此功能时,这就是我在命令行中看到的内容。
sql: 'select `users`.* from `users` where (`firstName` LIKE 1 or `providerId` =1)' }
如您所见,查询仅包含firstName和providerId。 没有提及lastName或用户名。
如何包含所有参数?
您的错误是在同一对象中两次使用相同的键。 第二个覆盖第一个。
assert.deepEqual({ a: true }, { a: false, a: true });
用短绒棉防止这种问题。
解:
let results = await User.query(queryBuilder => queryBuilder
.whereRaw('`firstName` LIKE ?', searchText)
.orWhereRaw('`lastName` LIKE ?', searchText)
.orWhereRaw('`username` LIKE ?', searchText)
.orWhereRaw('`providerId` = ?', searchText)
).fetchAll();
虽然那样不会产生您想要的括号。 您无需对自己的工作进行任何原始查询。 这是很标准的东西。
let results = await User
.where('firstName', 'like', searchText)
.orWhere(function () {
this.where('firstName', 'like', searchText)
.orWhere('lastName' 'like', searchText)
.orWhere('username', 'like', searchText)
.orWhere('providerId', searchText)
});
)
).fetchAll();
有关更多信息,请参考Knex文档 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.