使用迁移中的 Sequelize bulkUpdate,我可以访问 `this` 来生成价值吗?
Posted
技术标签:
【中文标题】使用迁移中的 Sequelize bulkUpdate,我可以访问 `this` 来生成价值吗?【英文标题】:With Sequelize bulkUpdate inside a migration can I access `this` to generate value? 【发布时间】:2022-01-20 14:28:49 【问题描述】:在 Sequelize 中,您可以在迁移中 bulkUpdate
记录。但我想使用 fullName 属性的值生成一个 @handle 属性。有没有办法访问我正在更新的记录(如this
),如下所示:
'use strict';
module.exports =
up: function(queryInterface, Sequelize)
return queryInterface.bulkUpdate('users', handle: this.fullName.replace(/\s+/g, '') );
,
down: function(queryInterface, Sequelize)
return queryInterface.bulkDelete('roles', null, );
;
【问题讨论】:
【参考方案1】:bulkUpdate
没有模型实例来更新它们。它会生成UPDATE
SQL-query 以对 DB 执行,因此您需要使用 DB 函数将要更新的每条记录中的某些子字符串替换为另一个子字符串。此类功能可能高度依赖于某种类型的 DBMS,因此请查看 DBMS 文档以了解如何实现此类替换。
它可能看起来像这样:
queryInterface.bulkUpdate('users',
handle: Sequelize.fn('replace', Sequelize.col('fullName'), 'substring to be replaced', 'substring to use as a replcement')
)
不保证您的 DBMS 在用于替换 a.substring 的函数中支持正则表达式。
【讨论】:
以上是关于使用迁移中的 Sequelize bulkUpdate,我可以访问 `this` 来生成价值吗?的主要内容,如果未能解决你的问题,请参考以下文章
使用 sequelize 和 typescript 进行自动迁移