如何使用sequelize在where对象中指定外部模型上的列?

时间:2017-08-22 15:48:18

标签: sql-server typescript sequelize.js

我正在尝试在sequelize(SQL Server和SQLite)中创建一个连接查询,这是我到目前为止所拥有的:

db.Job.findAll({
    attributes: [
        'title',
        'id',
         [fn('SUM', literal('CASE WHEN JobResponses.result = "true" THEN 1 ELSE 0 END', 'T')), 'True'],
         [fn('SUM', literal('CASE WHEN JobResponses.result = "false" THEN 1 ELSE 0 END', 'F')), 'False'],
         [fn('SUM', literal('CASE WHEN JobResponses.result IS NULL OR JobResponses.result NOT IN ("true", "false") THEN 1 ELSE 0 END', 'Incomplete')), 'Incomplete']
    ],
    include: [
        { model: db.JobResponse, as: 'JobResponses' },
    ],
    where: where,
    group: ['Job.id', 'Job.title'],
})

我希望聚合只能在特定日期范围内的作业响应上运行,所以我这样做是为了对象:

where['JobResponses.createdAt'] = {
    $lt: end,
    $gt: start
}

然而,这引发了问题:

  

错误:SQLITE_ERROR:没有这样的列:Job.JobResponses.createdAt

如何使用sequelize在where对象中指定外部模型上的列?

1 个答案:

答案 0 :(得分:0)

如果您想指定联接表的位置,您可以这样做:

db.Job.findAll({
 include: [
     { 
       model: db.JobResponse,
       as: 'JobResponses',
       where:{
         $and:[{createdAt:{$lt:end}},{createdAt:{$gt:start}}]
       }
     }
  ]
})