Drupal迁移:实体查找失败时如何让整行迁移失败?
问题分析与解决方案
你的配置没生效的核心原因有两个:
entity_lookup的默认行为会阻断后续插件执行:这个插件默认fail_on_missing: true,也就是当找不到匹配的分类术语时,它会直接抛出错误中断整个迁移,根本轮不到后面的skip_on_empty发挥作用。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
相关产品推荐
相关产品推荐

