You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Sequelize.literal中引用模型而非数据库表?

在Sequelize.literal中引用模型而非数据库表的方法

当然可以,不用硬编码数据库表名,直接通过模型的tableName属性就能动态获取表名,这样代码更贴合Sequelize的模型化写法,也避免了硬写表名带来的维护问题。

修改后的代码示例

const result = await OModel.findAll({
    where: { 
        requestId: requestId
    },
    include: {
        model: RModel,
        attributes: [
           'amount'      
        ]
    },
    attributes: [
        'id',
        'interest',
        [
            // 通过模型的tableName属性动态获取表名
            Sequelize.literal(`\`${RModel.tableName}\`.\`amount\` * \`${OModel.tableName}\`.\`interest\``),
            'amountXInterest'
        ]
    ]
});

关键说明

  • 每个Sequelize模型都自带tableName属性,默认会根据模型名生成对应表名(比如OModel默认对应omodels,如果手动设置了tableName: 'otable'则返回自定义值)。
  • 如果在include中给模型设置了别名(比如as: 'record'),那在literal里需要使用别名代替表名,比如\record`.`amount``,这种场景下也可以结合关联配置统一管理。
  • 也可以用字符串拼接替代模板字符串,避免转义反引号:
    Sequelize.literal('`' + RModel.tableName + '`.`amount` * `' + OModel.tableName + '`.`interest`')
    

内容的提问来源于stack exchange,提问作者codebear22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 08:33:14