Mysql Sequelize:WHERE-LIKE子句中的Concat字段
我正在使用sequelize ORM进行node.js项目。有一个查询,我需要对多个列的连接结果执行类似的操作 例如,如下所示: 从(CONCAT(firstname,,,lastname))中选择*,如“%John Do%” 我正在使用以下语法,并想知道这是否可能,而不必求助于使用原始查询(这在我的解决方案中是没有的)Mysql Sequelize:WHERE-LIKE子句中的Concat字段,mysql,node.js,sequelize.js,Mysql,Node.js,Sequelize.js,我正在使用sequelize ORM进行node.js项目。有一个查询,我需要对多个列的连接结果执行类似的操作 例如,如下所示: 从(CONCAT(firstname,,,lastname))中选择*,如“%John Do%” 我正在使用以下语法,并想知道这是否可能,而不必求助于使用原始查询(这在我的解决方案中是没有的) 有什么想法吗?你需要这样的东西 var criteria = { where: Sequelize.where(Sequelize.fn("concat", Seque
有什么想法吗?你需要这样的东西
var criteria = {
where: Sequelize.where(Sequelize.fn("concat", Sequelize.col("firstname"), Sequelize.col("lastname")), {
like: '%John Do%'
})
}
注:未经测试
灵感来自@code jaff,但您需要在名字和姓氏之间串联一个空格字符串,以使其正确工作。否则,它将只返回“JohnDoe”,而不返回“John Doe”。这是密码
Sequelize.where(Sequelize.fn('concat', Sequelize.col('firstName'), ' ', Sequelize.col('lastName')), {
like: '% John Doe %'
})
为了给那些可能不理解这将适合您的查询的人提供一些上下文,以下是where或语句中上述代码的一个示例。req.body.query是您发布的可变搜索词
Users.findAll({
where: {
$or: [
Sequelize.where(Sequelize.fn('concat', Sequelize.col('firstName'), ' ', Sequelize.col('lastName')), {
like: '%' + req.body.query + '%'
}),
{ email: { $like: '%' + req.body.query + '%' } },
{ companyName: { $like: '%' + req.body.query + '%' } }
]
}
})
Sequelize 4.0的更新
基于字符串的运算符($like
和上例中的$or
)已被弃用,取而代之的是基于符号的运算符。这对安全来说是件好事
见:
这些操作符将替换为
[Sequelize.Op.like]
和[Sequelize.Op.or]
。在他们的文档中突出显示的sequelize选项中也有其他配置方法我能够通过基于@yjimk answer的新sequelize版本5.21.13实现这一点
Users.findAll({
where: {
[sequelize.Op.or]:{
namesQuery: sequelize.where(
sequelize.fn(
"concat",
sequelize.col("firstName"),
" ",
sequelize.col("lastName")
),
{
[sequelize.Op.like]: `%${req.body.query}%`,
}
),
email: {[sequelize.Op.like]: `%${req.body.query}%`},
companyName: {[sequelize.Op.like]: `%${req.body.query}%`},
}
})
我必须用
[Sequelize.Op.like]
替换Sequelize.where中的like
,才能让它工作。
Users.findAll({
where: {
[sequelize.Op.or]:{
namesQuery: sequelize.where(
sequelize.fn(
"concat",
sequelize.col("firstName"),
" ",
sequelize.col("lastName")
),
{
[sequelize.Op.like]: `%${req.body.query}%`,
}
),
email: {[sequelize.Op.like]: `%${req.body.query}%`},
companyName: {[sequelize.Op.like]: `%${req.body.query}%`},
}
})