node-sequelize操作mysql数据库(5)--查询并添加

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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值