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 查询,一个用于计数,最后一个用于保存
目前我有一个 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 查询,一个用于计数,最后一个用于保存