Sequelize.js - 在保存时生成字段值

标签 sequelize.js

目前,我有一个 SQL 查询,它根据其实际内容为名为 seqid 的列生成一个值:

INSERT into invoices(seqid) SELECT concat(year(CURDATE()),'-',lpad(ifnull(max(convert(substr(seqid,6), UNSIGNED INTEGER)+1),1),4,0)) FROM invoices where seqid like concat(year(CURDATE()),'-%')
基本上它以以下格式创建记录:

2019-0001 2019-0002 2019-0003 2020-0001 2021-0001...


我想使用 sequelize 达到相同的结果。但我在文档中找不到如何。 Can sequelize.literal 可以用于这种情况,或者是一个钩子(Hook),或者两者的混合。
任何帮助,将不胜感激。谢谢

最佳答案

使用这样的钩子(Hook)有效:

beforeSave: async (instance,options)=>{
    let year=new Date().getFullYear()
    let offset= await Invoice.count('seqid',{where:{seqid: {[Op.like]: `${year}-%`}}})
    instance.seqid=[year,Number(offset+1).toString().padStart(4,0)].join('-');
}
但是,公平的问题是:在钩子(Hook)中调用 .count 真的是一个好习惯吗,这会导致 2 个 SQL 查询,一个用于计数,最后一个用于保存

关于Sequelize.js - 在保存时生成字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65842536/

相关文章:

node.js - 如何使用外键指向没有循环依赖的默认值?

express - Sequelize Query 获取最后的附加值

javascript - 使用 sequelise.js 返回空对象的最大查询

mysql - 收到sequelize的响应后修改JSON

node.js - Sequelize.js。如何在 JSON 数据类型中查找对象?

mysql - Sequelize : Updating Model and its Associations

reactjs - 使用 M :N relationship with sequelize on postgres 创建实体

mysql - Sequelizejs 中的 .save 和 .create 有什么区别?

javascript - 类型错误 : Cannot read property 'findAll' of undefined (mariaDB, ExpressJs)

sequelize.js - 通过列表过滤 "to many"包含的查询