繁体   English   中英

嵌套条件包括在Sequelize中

[英]Where condition in nested include in Sequelize

我有一个包含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子句中或在聚合函数中使用。

知道我在做什么错吗?

是的,你可以这么做 ,

当前问题

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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM