【问题标题】:Where condition in nested include in Sequelize嵌套中的条件包含在 Sequelize 中
【发布时间】:2019-04-11 05:50:51
【问题描述】:

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

我的一段代码正在运行

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

但我不是很满意,我希望我的 where 条件不在我的包含范围内,但是当我尝试时

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

引发错误。

是否可以在包含之外设置 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 条件能够在一个范围内设置所有嵌套包含

标签: mysql node.js sequelize.js


【解决方案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
}

【讨论】:

  • 我试过这个并得到一个错误'缺少表的 FROM 子句条目'
  • @Tibo ,请确保您没有删除 required: true ,并在包含的模型中添加属性。
  • 我使用新请求编辑了我的帖子。我仍然有我的 required: true 不排除 Manager 实体的任何属性。
  • 谢谢,我在经理默认范围内添加了经理 ID 属性 exclude。现在完美运行
  • 很高兴来到这里,顺便编码愉快
猜你喜欢
  • 2021-02-09
  • 2019-11-04
  • 2017-08-27
  • 2021-05-01
  • 1970-01-01
  • 2017-06-22
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
相关资源
最近更新 更多