我有一个与审批模型(多级审批工作流)有很多关系的票证模型。批准属于用户。
对于一个特定的用例,我必须过滤所有待批准的用户,并向他显示他的待批准票据。
像这样解决了-

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

最佳答案

在一个查询中找到解决方法。
更新票证,使其在批准时具有两个具有相同外键的关联(其中一个已定义别名)-

Ticket.hasMany(models.Approval, {
  foreignKey: 'ticketId',
};
Ticket.hasMany(models.Approval, {
  as: 'ApprovalFilter',
  foreignKey: 'ticketId',
};

然后使用多个include进行过滤-
models.Ticket.findAll({
  include: [{
    model: models.Approval,
    as: 'ApprovalFilter',
    where: { userId: options.userId },
  }, {
    model: models.Approval,
  }]
}).then(function(tickets){...

10-06 11:53