You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Drupal 8中迁移Drupal 7 taxonomy并保留旧Term ID?

如何在Drupal 7到Drupal 8的分类迁移中保留原有Term ID?

这个问题我碰到过好多次了——Drupal的迁移系统默认会给新生成的Term分配自动递增的ID,但只要调整迁移配置,就能轻松保留D7里的原Term ID,具体步骤如下:

1. 调整迁移配置文件

首先,找到你的分类迁移配置(如果是自定义迁移,通常在modules/custom/[你的迁移模块]/config/install/目录下,命名类似migrate_plus.migration.d7_taxonomy_term_[词汇机名].yml),或者通过Migrate UI导出默认的分类迁移配置后修改。

关键配置修改:

  • Source部分:默认的d7_taxonomy_term源插件已经会获取D7的tid字段,无需额外配置,除非你自定义了源逻辑。
  • Destination部分:添加preserve: true参数,告诉迁移系统保留原ID:
destination:
  plugin: entity:taxonomy_term
  preserve: true
  • Process部分:把源的tid直接映射到目标Term的tid字段,这是保留ID的核心步骤:
process:
  tid: tid  # 将D7的Term ID直接赋值给D8的Term ID
  name: name
  description/value: description
  description/format: format
  vid:
    plugin: migration_lookup
    migration: d7_taxonomy_vocabulary
    source: vid
  # 其他字段(比如权重、语言等)按需添加映射

2. 提前检查ID冲突

在运行迁移前,务必检查目标D8站点的对应词汇表里,有没有已经使用了D7中Term ID的条目。如果有冲突,要么删除这些目标站点的Term,要么调整D7里的对应ID(不推荐),否则迁移会直接失败。

3. 按顺序运行迁移

分类Term的迁移要优先于依赖它的内容(比如节点、用户引用分类的字段),所以先运行分类迁移命令:

drush migrate:import d7_taxonomy_term_[你的词汇机名]

等分类迁移完成后,再运行内容相关的迁移任务。

额外注意事项

  • 如果使用Migrate UI模块,修改完配置后需要重新导入迁移配置,部分版本也支持直接在UI里编辑迁移的目标设置来开启preserve参数。
  • 如果你要批量迁移多个词汇表,每个词汇表的迁移配置都需要单独添加上述设置。

内容的提问来源于stack exchange,提问作者Moby M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:14:03