sequelize实现基本的增删改查功能在文档中介绍的计较详细。在实际应用时经常会将两个或多个功能综合应用,这次介绍的查询并添加中就有一点需要注意。
实现功能:表A表B数据结构完全一致,从表A中查询的一条数据,放入表B中。
getAndCreate:async(ctx)=>{
let findNum = await MysqlA.findOne({
where:{
num:'007'
}
})
await MysqlB.create(findNum)
ctx.body = {'msg':'添加成功'}
}
按照正常思路这样做是没有问题的。但是会发现无法将数据添加到表B中。
其实打印一下findNum就会发现查询返回的数据会自动用dataValues
包裹。我们可以查询时在where同级设置raw: true,//返回源数据
,或者可以在全局设置:
const Sequelize = await new Sequelize('database', 'username', 'password', { query: { raw:true } })
(2021-01-22 16:26:30)
——————————————————
刚才在此基础上发现一个问题:
如果使用全局的raw:true,那么在关联查询的时候就会报错result.get is not a function
.
不知道有没有好的解决办法,现在我把全局的raw:true取消了。(2021-01-23 21:20)
——————————————————
有一个办法可以彻底避免以上问题:
那就是在create时乖乖的使用toJSON()
getAndCreate:async(ctx)=>{
let findNum = await MysqlA.findOne({
where:{
num:'007'
}
})
await MysqlB.create(findNum.toJSON())
ctx.body = {'msg':'添加成功'}
}
(2021-01-23 21:28)