这是项目安装:
1. Nodejs 服务器端环境
2. MySQL数据库(使用Knexjs查询构建器)
3. 'locations'
数据库中的表格,其中包含'country', 'city', 'category', 'working_hours'
等字段
4.表单输入,用户可以选择所有这些值并提交搜索。当用户不选择任何内容时,默认为“全部”。我需要过滤数据库并选择与用户搜索输入相对应的行。
我试着这样做:
knex('locations').where({
country: countryInput,
city: cityInput,
category: categoryInput,
working_hours: hoursInput
})
.then(function(rows) {.....})
.catch(function(err) {.....});
如果用户选择所有输入字段,如果用户只选择其中一些字段而其他字段设置为全部输入字段,则该功能很好用。如何使这项工作?
提前谢谢!
答案 0 :(得分:3)
这是非常常见的解决方案:
let query = knex('locations');
if (countryInput) {
query = query.where('country', countryInput);
}
if (cityInput) {
query = query.where('city', cityInput);
}
if (categoryInput) {
query = query.where('category', categoryInput);
}
if (hoursInput) {
query = query.where('working_hours', hoursInput);
}
query
.then(function(rows) {.....})
.catch(function(err) {.....});
答案 1 :(得分:0)
您可以使用Modify
修改查询期望req.query
对象与您的table
列匹配 -
knex('locations')
.modify(function(queryBuilder) {
if (req.query) {
queryBuilder.where(req.query);
}
})
.then(function(rows) {.....})
.catch(function(err) {.....});
好吧,有一些潜在的风险。您需要先过滤查询。