目前,我有一个 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/