我有一个票证模型,该模型具有hasMany与批准模型(多级批准工作流)的关系。批准属于用户。
对于特定的用例,我必须过滤用户要进行的所有待处理的批准,并向他展示他的待批准票证。
已经解决了-
models.Ticket.findAll({
include: [{
model: models.Approval,
where: { userId: options.userId }
}]
}).then(function(tickets){...
给我过滤后的票证,但我还必须获得票证的所有批准清单以显示批准工作流程。可以通过Sequelize中的单个查询来完成吗?
Data (T is Ticket, A is Approval and U is User) -
T1 - A1/U1, A2/U2, A3/U3
T2 - A4/U2
T3 - A5/U1, A6/U4
Output for U1 -
T1 - A1/U1
T3 - A5/U1
Expected for U1 -
T1 - A1/U1, A2/U2, A3/U3
T3 - A5/U1, A6/U4
答案 0 :(得分:0)
这有点棘手,但是通过这种方式,您可以在单个查询中获得结果,
models.Approval.findAll({
where: { userId: options.userId } // <---- Get all the approvals for user
include: [{
model: models.Ticket, // <----- Get all tickets for it
include: [{
model: models.Approval // <---- Get all the approvals for that ticket
}]
}]
})
注意:我还没有尝试过,但是只要我知道这应该 工作。
答案 1 :(得分:0)
找到了一种解决方法,可以在一个查询中解决该问题。
将票证更新为具有两个具有相同外键的批准关联(一个已定义别名)-
Ticket.hasMany(models.Approval, {
foreignKey: 'ticketId',
};
Ticket.hasMany(models.Approval, {
as: 'ApprovalFilter',
foreignKey: 'ticketId',
};
然后使用多个包含项的过滤器-
models.Ticket.findAll({
include: [{
model: models.Approval,
as: 'ApprovalFilter',
where: { userId: options.userId },
}, {
model: models.Approval,
}]
}).then(function(tickets){...