使用迁移中的 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时如何自动创建迁移文件?

删除 sequelize 迁移中的约束

使用 sequelize 和 typescript 进行自动迁移

如何使用 Sequelize.js ORM 正确迁移 sqlite3 数据库?

尝试使用 sequelize 创建迁移时出错

NodeJS sequelize 自动生成模型并运行迁移 SQL 语法错误