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

Drupal迁移:实体查找失败时如何让整行迁移失败?

问题分析与解决方案

你的配置没生效的核心原因有两个:

  1. entity_lookup的默认行为会阻断后续插件执行:这个插件默认fail_on_missing: true,也就是当找不到匹配的分类术语时,它会直接抛出错误中断整个迁移,根本轮不到后面的skip_on_empty发挥作用。
  2. skip_on_empty不是最适配场景的插件:即使你让entity_lookup返回空值,skip_on_empty只是检查值是否为空,而针对“实体查找失败”的场景,Drupal迁移有更精准的插件可用。

下面给你两种可行的修复方案:

方案一:调整entity_lookup参数配合skip_on_empty

先让entity_lookup在找不到术语时返回空值,再用skip_on_empty检测并跳过该行:

field_initiative:
  - source: original_source_data
    plugin: entity_lookup
    entity_type: taxonomy_term
    bundle_key: vid
    bundle: initiative
    value_key: name
    ignore_case: true
    # 关键设置:找不到时返回空值,而非直接报错中断迁移
    fail_on_missing: false
  - plugin: skip_on_empty
    method: row
    message: 'Skipped Missing Term Initiative'
    # 指定要检查的字段(当前处理的field_initiative)
    field: field_initiative

方案二:使用更精准的skip_on_not_exists插件

这个插件专门用于检测字段对应的实体是否存在,比skip_on_empty更贴合你的需求:

field_initiative:
  - source: original_source_data
    plugin: entity_lookup
    entity_type: taxonomy_term
    bundle_key: vid
    bundle: initiative
    value_key: name
    ignore_case: true
    fail_on_missing: false
  - plugin: skip_on_not_exists
    method: row
    message: 'Skipped Missing Term Initiative'
    field: field_initiative
    entity_type: taxonomy_term

额外提示:区分“跳过”和“标记失败”

如果你希望的不是直接跳过该行,而是在迁移报告里标记该行失败(保留失败记录),可以把method: row改成method: fail,比如:

plugin: skip_on_not_exists
method: fail
message: 'Failed to find Initiative term: [original_source_data]'

内容的提问来源于stack exchange,提问作者Vishal Khialani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:01:34