嵌套条件包括在Sequelize中

时间:2018-11-07 18:25:53

标签: mysql node.js sequelize.js

我有一个包含3个实体的模型,即文档,员工和经理。一个文档属于一个雇员,一个雇员属于一个经理。 我的目标是检索经理员工的所有文件。

我的代码正在工作

Document.findAll({
      include: [{
        model: models.Employee,
        required: true,
        as: 'employee',
        include: [{
          model: models.Manager,
          required: true,
          as: 'manager',
        }],
      }],

但是我不是很满意,我想让我的条件超出我的包含范围,但是当我尝试

where {
        'employee.manager.id': id
      }

引发错误。

是否可以在include之外设置where条件?

编辑:

我将代码更改为

Document.findAll({
where: {'$employee.manager.id$': id},
      include: [{
        model: models.Employee,
        required: true,
        as: 'employee',
        include: [{
          model: models.Manager,
          required: true,
          as: 'manager',
          where: { id: managerId },
        }],
      }],

它正在工作。

现在,我想完善我的模型。每个文档都属于一种类型(管理,评估...),我想为每个经理检索每种类型的最新文档。我使用了工作正常的订单,并尝试使用工作不正常的组

order: [ [ 'updatedAt', 'DESC' ]],
group: ['type'],

我收到以下消息:列\“ Document.id \”必须出现在GROUP BY子句中或在聚合函数中使用。

知道我在做什么错吗?

1 个答案:

答案 0 :(得分:1)

是的,您可以这样做,

问题,其中有一个:

where {
    'employee.manager.id': id // <--- Here 'employee.manager.id' cosidered as whole column name
}

解决方案:

where {
    '$employee.manager.id$': id //<--- To make sequlize realize you need to place it b/w $$ ,
    //or
    sequelize.col('employee.manager.id') : id // <--- You can try this also
}
相关问题