我正在使用Sequelize实现一个应用程序来处理与数据库的通信。
我在数据库中有很多用户,我想实现一些搜索功能,允许用户根据他们的全名查找其他用户。 用户在其模型中具有(以及其他属性)firstName和lastName。
正在寻找其他用户的用户可以搜索" John Doe",其中John是名字,Doe是姓氏。 不幸的是,名字和姓氏存储在我的模型中的单独字段中。因此,我需要连接"中的firstName和lastName字段,其中" -clause正如我在下面尝试的那样。
在where子句中,我只是连接firstName和lastName,然后检查是否"喜欢"作为参数name
传递的全名。我认为下面这段代码的用意很清楚。然而它不起作用(错误说它并不期望'('在concat之后所以这个语法是不允许的。)有一个简单的技巧可以做到这一点或者我应该写我自己的查询使用sequelize.query
?
var findUserByName = function(name) {
return models.User.find({where: {concat(firstName,' ',lastName): like: name}});
}
答案 0 :(得分:0)
你可以这样做:
User.find({
where: {
$or: [
name: {
$like: ['%', firstName, '%'].join('')
},
lastName: {
$like: ['%', lastName, '%'].join('')
}
]
}).success(function (user) {});
答案 1 :(得分:0)
您可以在where子句中尝试
where: {
$and: [
Sequelize.where(
Sequelize.fn('concat', Sequelize.col('firstName'), ' ', Sequelize.col('lastName')), {
like: '%'+name+'%'
}
)
]
}