Sequelize - 查询模型和相关模型 - 或者
Sequelize - query on model and related model - OR
我是 Sequelize 的新手。我有一个场景,我想从数据库中检索记录,并对所需的模型记录及其相关记录进行筛选。我需要找到用“主”模型上的属性回答查询的记录 或 回答相关字段查询的记录。
let customers = await db.customers.findAll({
where: {
location: locationId,
some_kind_of_string_identifier: someKindOfStringIdentifier
},
include: [
{
model: db.users,
where: db.sequelize.where(
db.sequelize.fn(
'concat',
db.sequelize.col('first_name'),
' ',
db.sequelize.col('last_name'),
),
db.sequelize.Op.like,
`%${query}%`,
),
},
],
});
所以在上面的示例中,我有一个自由文本搜索查询(查询变量),我想获得所有名称如查询 OR 且具有“someKindOfStringIdentifier”的客户匹配查询。
有办法吗?
我会尝试以下操作:
customers.findAll({
where: {
$and: [{ location: locationId },
{ $or: [{ some_kind_of_string_identifier: someKindOfStringIdentifier },
Sequelize.where(
Sequelize.fn('concat',
Sequelize.col('$db.users.first_name$'), ' ', Sequelize.col('$db.users.last_name$')),
{ like: '%' + query + '%' }
)]
}]
},
include: [{
model: db.users,
required: false
}]
});
参考:,
现在,您在进行连接时有效地执行了 WHERE。这不是你想要的。您想要 JOIN 两个表(客户和用户),然后将 WHERE 与您的 or
条件一起应用,对吗?
以上代码未经测试,但我相信您必须在 findAll
中应用条件,而不是 include
。
我是 Sequelize 的新手。我有一个场景,我想从数据库中检索记录,并对所需的模型记录及其相关记录进行筛选。我需要找到用“主”模型上的属性回答查询的记录 或 回答相关字段查询的记录。
let customers = await db.customers.findAll({
where: {
location: locationId,
some_kind_of_string_identifier: someKindOfStringIdentifier
},
include: [
{
model: db.users,
where: db.sequelize.where(
db.sequelize.fn(
'concat',
db.sequelize.col('first_name'),
' ',
db.sequelize.col('last_name'),
),
db.sequelize.Op.like,
`%${query}%`,
),
},
],
});
所以在上面的示例中,我有一个自由文本搜索查询(查询变量),我想获得所有名称如查询 OR 且具有“someKindOfStringIdentifier”的客户匹配查询。 有办法吗?
我会尝试以下操作:
customers.findAll({
where: {
$and: [{ location: locationId },
{ $or: [{ some_kind_of_string_identifier: someKindOfStringIdentifier },
Sequelize.where(
Sequelize.fn('concat',
Sequelize.col('$db.users.first_name$'), ' ', Sequelize.col('$db.users.last_name$')),
{ like: '%' + query + '%' }
)]
}]
},
include: [{
model: db.users,
required: false
}]
});
参考:
现在,您在进行连接时有效地执行了 WHERE。这不是你想要的。您想要 JOIN 两个表(客户和用户),然后将 WHERE 与您的 or
条件一起应用,对吗?
以上代码未经测试,但我相信您必须在 findAll
中应用条件,而不是 include
。