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

Sequelize.js - Generate field value on save

目前我有一个 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 获得相同的结果。但是我在文档中找不到方法。 sequelize.literal 可以用于这种情况,或钩子,或两者的混合。 任何帮助,将不胜感激。谢谢

像这样使用钩子有效:

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('-');
}

但是,公平的问题是:在钩子内调用 .count 真的是一个好习惯吗,这会导致 2 个 SQL 查询,一个用于计数,最后一个用于保存