如何在单个Migration.yml中生成含分类引用字段的术语并迁移节点?
合并migrate_spreadsheet迁移任务实现单批次节点导入
核心方案
将原有的两个迁移任务合并为单迁移配置,通过迁移插件链同时完成术语的查找/创建与节点导入,无需拆分任务即可支持batchImport调用。核心是利用entity_lookup+entity_generate组合处理需要多字段匹配的provider术语,同时用原生entity_generate处理provider_name术语。
具体实现步骤
1. 基础迁移数据源配置
以Excel文件为数据源,指定列映射与唯一标识字段(regnr):
source: plugin: migrate_spreadsheet path: 'public://your_providers_file.xlsx' # 替换为实际Excel路径 header_row: 1 columns: A: regnr B: provider C: provider_name D: provider_number keys: - regnr # 用唯一值作为迁移源ID
2. 处理provider字段(多字段关联术语)
由于provider术语需要同时匹配name和field_provider_number,需通过插件链实现"先查找再创建":
- 用
entity_lookup匹配同时满足名称和编号的现有术语 - 若未找到,用
entity_generate创建新术语并自动填充field_provider_number - 将最终得到的术语ID映射到节点的
field_provider字段
3. 处理provider_name字段(单字段匹配术语)
直接使用entity_generate插件,自动查找或创建匹配名称的术语:
field_provider_name: plugin: entity_generate entity_type: taxonomy_term bundle: provider_name # 替换为你的provider_name词汇机名 source: provider_name
4. 完整迁移配置示例
id: node_provider_combined_import label: 'Combined Import: Nodes + Provider Terms' source: plugin: migrate_spreadsheet path: 'public://providers.xlsx' header_row: 1 columns: A: regnr B: provider C: provider_name D: provider_number keys: - regnr process: # 处理多字段关联的provider术语 field_provider: - plugin: entity_lookup entity_type: taxonomy_term bundle: provider # 替换为你的provider词汇机名 ignore_case: true # 同时匹配名称和provider_number字段 match: name: provider field_provider_number: provider_number source: - provider - provider_number - plugin: entity_generate entity_type: taxonomy_term bundle: provider # 创建新术语时填充的字段值 values: name: provider field_provider_number: provider_number # 处理单字段的provider_name术语 field_provider_name: plugin: entity_generate entity_type: taxonomy_term bundle: provider_name source: provider_name # 节点基础字段配置 title: regnr type: your_node_type # 替换为目标节点类型机名 destination: plugin: 'entity:node' migration_dependencies: { } # 无依赖,单迁移独立运行
关键注意事项
- 确保目标分类词汇(
provider和provider_name)已创建,且provider词汇已添加field_provider_number字段 - 迁移运行账号需拥有创建节点、分类术语的权限
- 测试阶段建议先导入少量数据,验证术语匹配、创建及字段关联是否正确
- 若需自定义匹配逻辑,可开发自定义迁移插件扩展
entity_lookup的行为
内容的提问来源于stack exchange,提问作者rvdv
相关产品推荐
相关产品推荐

