如何使用 Sequelize 查询虚拟列?

Posted

技术标签:

【中文标题】如何使用 Sequelize 查询虚拟列?【英文标题】:How to query virtual column using Sequelize? 【发布时间】:2017-10-21 12:50:13 【问题描述】:

Student表中有一个Sage,我想用2017-Sage查询一个学生的出生年份,但是我不知道怎么做,我试过这样:

db.Student.findAll(
        attributes: ['Sname','Ssex',[2017-Sequelize.col('Sage'),'Year of birth']],
        where: 
            Clno: 
                $in: ['01311','10665']
            
        
    )

但它来了错误:

UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: attr[0].indexOf is not a function

【问题讨论】:

【参考方案1】:

您可能需要检查 Sequelize.VIRTUAL 数据类型。

所以在学生模型定义中可能需要这样的东西:

Student = sequelize.define('student', 
    ...
    birthYear: 
        type: Sequelize.VIRTUAL(Sequelize.INTEGER, "(2017 - `students`.age) as birthYear")
    

更多示例可在此处获得:https://github.com/sequelize/sequelize/issues/7350

【讨论】:

使用刻度似乎不再起作用。相反,您可以将带有文字和别名的元组作为虚拟列所依赖的属性之一传递:Sequelize.VIRTUAL(Sequelize.INTEGER, [[Sequelize.literal("2017 - students.age"), "birthYear"]])

以上是关于如何使用 Sequelize 查询虚拟列?的主要内容,如果未能解决你的问题,请参考以下文章

如何对 Sequelize 中的查询结果进行排序?

如何在sequelize中对嵌套模型中的列进行排序?

Sequelize 基于关联的查找

如何在使用 Sequelize 更改列或添加新列时更新迁移文件

如何使用 Sequelize.JS 选择具有 2 个唯一列的所有行?

如何使用带有 Sequelize 的 EXISTS 子句进行查询?