我试图在Nodejs中使用if条件使用模型查询查询。
如果有过滤参数,我想按filter parameter
选择用户。如果我不想选择所有用户。
我是通过以下方式做到的,但我对此进行了硬编码:
var filterData = { id: { $ne: null} };
使用Sequelize有没有正确的方法呢?感谢。
function getData(id, filter='') {
var filterData = { id: { $ne: null} };
if (filter !== '') {
filterData = {
$or: [
{firstName: {$like: '%' + filter + '%'}},
{lastName: {$like: '%' + filter + '%'}}
]
};
}
return models['Profile'].findAll({
where: { profileId: id },
include: [{
model: models.Profile.scope('essentials'),
where: filterData,
as: 'entity'
}]
})
}

答案 0 :(得分:1)
我认为您已经尝试过var filterData = {}
或var filterData = true
并且没有效果?如果是这样,另一个选择是事先构建你的include对象,然后有条件地将where子句添加到它:
function getData(id, filter='') {
var includeObj = {
model: models.Profile.scope('essentials'),
as: 'entity'
}
if (filter !== '') {
includeObj.where = {
$or: [
{firstName: {$like: '%' + filter + '%'}},
{lastName: {$like: '%' + filter + '%'}}
]
};
}
return models['Profile'].findAll({
where: { profileId: id },
include: [includeObj]
})
}
这避免了尴尬的"其中ID不等于null"条件。
也是一个小旁注(也许你已经知道这个,只是更喜欢更明确的代码)但是因为空字符串在javascript中是假的,
if (filter !== '') {
可以替换为
if (filter) {