我有一个sequelize模型,它使用mysql函数来创建guid,例如:
guid: {
type: DataTypes.STRING.BINARY,
defaultValue: sequelize.fn('UuidToBin', sequelize.fn('uuid')),
primaryKey: true
},
inProcess: DataTypes.BOOLEAN,
...
我使用 create 方法成功创建了新记录,包括二进制 guid,
MessagesDBModel.create(messageObj)
.then((savedMessage) => res.send(200, {
status: 200,
message: "OK",
guid: savedMessage.guid.toString('hex') //outputs [object Object]
但是,无法从savedMessage对象中检索guid的值。当我设置断点时,savedMessage.dataValues.guid = Fn。
如何访问插入的 guid 值而不是创建它的函数?
最佳答案
你可以先考虑build
的情况。在下面的代码中
const record = Model.build({}) // assuming Model has guid attribute that you wrote
此时record.guid
应该是什么?由于事务尚未发生,因此不应执行该函数,因此无法确定 guid
值。
对于在事务完成之前和之后具有相同值的标量值来说,这不是问题。然而,在函数的情况下,由于确定值的点就是提交事务的点,因此 sequelize
必须将事务中包含的整个对象的值替换为函数的执行结果。看来这是一项非常辛苦的工作。
目前,这似乎是使用last_inserted_id或类似的东西再次选择的好方法。
关于mysql - 插入的二进制 GUID 值作为函数定义返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49373702/