我正在使用sequelize進行一些過濾。sequelize嵌套包括與where子句
我的當前表的結構:
- 表1保持物品(其具有圖像)和用戶(不相關)
- 表1具有表2通過Table2id上表1(不按表3)
- 直接的關係表2與表3通過表3到表3的直接關係(不是表4)
- 表3與表4通過表4的表4直接關係表3
我想過濾表3和表4,考慮到我只能使用頂級where子句在表2上過濾。
的方式我填寫我的WHERE條件只使用一個基本對象:
var Table2id = parseInt(req.query.Table2id) || null,
Table3id = parseInt(req.query.Table3id) || null,
Table4id = parseInt(req.query.Table4id) || null,
whereCondition = { deleted: 0 }
if (Table2id) { whereCondition['table2id'] = Table2id }
if (Table3id) { whereCondition['table3id'] = Table3id }
if (Table4id) { whereCondition['table4id'] = Table4id }
Table1.findAndCountAll({
limit: limit,
offset: offset,
order: 'created_at DESC',
where: whereCondition,
include: [
{
model: User,
}, {
model: Item,
include: [
{
model: Image
}
]
}, {
model: Table2,
include: [
{
model: Table3,
include: [
{
model: Table4,
}
]
}
]
}
],
}).then(function (results) { res.json(results) })
我嘗試使用一些黑客,我發現像whereCondition['$Table3.table3id$'] = Table3id
但無濟於事。
如何過濾嵌套包括?有沒有另外一種方法可以構建查詢,所以我不需要嵌套包含,但仍然保留這個數據結構(有沒有更好的方法來構造這個比我想象的更多)?
編輯:所以我想都能夠對包含的表進行排序,並且至少有一個參數在頂級where子句中設置(如deleted = 0)。
我試着修改查詢,如下所示:
var Table2id = parseInt(req.query.Table2id) || null,
Table3id = parseInt(req.query.Table3id) || null,
Table4id = parseInt(req.query.Table4id) || null,
whereCondition = { deleted: 0 },
extraWhereCondition = {}
if (Table2id) { whereCondition['table2id'] = Table2id } // figured this can be left alone in this particular case (as it works in top-level where clause)
if (Table3id) { extraWhereCondition['table3id'] = Table3id }
if (Table4id) { extraWhereCondition['table4id'] = Table4id }
Table1.findAndCountAll({
limit: limit,
offset: offset,
order: 'created_at DESC',
where: whereCondition,
include: [
{
model: User,
}, {
model: Item,
include: [
{
model: Image
}
]
}, {
model: Table2,
include: [
{
model: Table3,
where: extraWhereCondition,
include: [
{
model: Table4,
where: extraWhereCondition,
}
]
}
]
}
],
}).then(function (results) { res.json(results) })
但是這給了我一個錯誤,Table2.Table3.Table4.table4id在字段列表未知。
你可以把其中的每個條款包括: – Adiii
@Adiii這給了我一個'未知列「Table2.Table3。 Table4.Table4id'in field list' error。 – NicT
你需要什麼?其實,我沒有得到你的問題,如果你需要內部包含where子句然後讓我知道 – Adiii