Sequelize:OR 查询 2 个或更多 table 个关系
Sequelize: OR query across 2 or more table relations
我正在查看这个 Whosebug 解决方案:
我尝试复制该解决方案,但如果包含超过 1 个模型,我会收到错误消息。
missing FROM-clause entry for table "files"
Tables:
- 文件
- 文件
- 用户
Table关系:
- documents.belongsTo(models.files)
- documents.belongsto(modes.users)
文档查询:
where = {
[Op.or]: [
{
'$files.name$': {
[Op.iLike]: `%${$search.like}%`,
},
},
{
documentName: {
[Op.iLike]: `%${$search.like}%`,
},
},
{
'$users.name$': {
[Op.iLike]: `%${$search.like}%`,
},
},
],
};
任何人都可以 assist/provide 关于如何跨 2 个或更多 table 关系进行 OR 查询的建议吗?
根据@Anatoly 在评论中的回答,解决这个问题的方法是添加 subQuery: false,即
context.params.sequelize = {
raw: false,
subQuery: false,
include: [
{
model: files,
},
{
model: users,
},
],
};
"subQuery: false 表示使用 JOIN/LEFT JOIN 表本身而不是从这些表构造的连接子查询"
只需将 subQuery: false
选项添加到您的 sequelize 查询中,如下所示:
const where = // here is a where condition
const documents = await db.documents.findAll({
subQuery: false,
where
})
subQuery: false 表示使用 JOIN/LEFT JOIN 表本身而不是从这些表构造的连接子查询
我正在查看这个 Whosebug 解决方案:
我尝试复制该解决方案,但如果包含超过 1 个模型,我会收到错误消息。
missing FROM-clause entry for table "files"
Tables:
- 文件
- 文件
- 用户
Table关系:
- documents.belongsTo(models.files)
- documents.belongsto(modes.users)
文档查询:
where = {
[Op.or]: [
{
'$files.name$': {
[Op.iLike]: `%${$search.like}%`,
},
},
{
documentName: {
[Op.iLike]: `%${$search.like}%`,
},
},
{
'$users.name$': {
[Op.iLike]: `%${$search.like}%`,
},
},
],
};
任何人都可以 assist/provide 关于如何跨 2 个或更多 table 关系进行 OR 查询的建议吗?
根据@Anatoly 在评论中的回答,解决这个问题的方法是添加 subQuery: false,即
context.params.sequelize = {
raw: false,
subQuery: false,
include: [
{
model: files,
},
{
model: users,
},
],
};
"subQuery: false 表示使用 JOIN/LEFT JOIN 表本身而不是从这些表构造的连接子查询"
只需将 subQuery: false
选项添加到您的 sequelize 查询中,如下所示:
const where = // here is a where condition
const documents = await db.documents.findAll({
subQuery: false,
where
})
subQuery: false 表示使用 JOIN/LEFT JOIN 表本身而不是从这些表构造的连接子查询