在我的Node
申请中,我们使用Sequelize
与mysql
建立联系
有两张表User
& UserOption
User
表有以下字段
user_id(pk)
user_email
UserOption
表有以下字段
option_id(pk)
user_id(fk)
first_name
我需要按user_email
&中的搜索文字列出所有用户first_name
是否有任何选项可以同时搜索父母& Sequelize
中的子表格字段?
更新
User
表
user_id user_email
1 text@text.com
2 anything@anything.com
3 jhon@smthng.com
UserOption
表
option_id user_id first_name
1 1 jhon
2 2 smith
3 3 david
如果我搜索" jhon",结果将是id为1和2的用户
答案 0 :(得分:1)
您需要include
模型UserOption
查找模型User
。这将生成条件为JOIN
的{{1}}子句,并添加指定的UserOption.user_id = User.user_id
子句以对两个表的WHERE
和user_email
列执行文本查找
first_name
修改强>
根据您更新的问题,我认为您可以尝试使用sequelize.literal
方法,但是,根据文档:
创建一个表示文字的对象,即不会被转义的东西。
因此有必要自己逃避所需的值
User.findAll({
where: {
user_email: { $like: '%text%' }
},
include: [
{
model: UserOption,
where: {
first_name: { $like: '%text%' }
},
attributes: []
}
]
}).then((users) => {
// result
});
它会生成一个查询,从let escValue = sequelize.escape(lookupText);
User.findAll({
where: {
$or: [
{ email: { $like: '%' + lookupText + '%' },
{ id: { $in: sequelize.literal(`(SELECT uo.user_id FROM user_options uo WHERE uo.first_name LIKE CONCAT('%', ${escValue}, '%'))`) }
]
}
}).then((users) => {
// result...
});
表中选择users
或email LIKE '%text%'
位于指定查询结果中的用户。
如果满足您的需求,我很好奇,等待反馈。