你在这里

迁移过程

原文链接:Migrate process >
迁移过程
迁移的属性值配置描述了目的地是如何将属性值从源数据一个一个(property-by-property)构造来的。 过程值是一个关联数组,是每个目的地的属性值。 每个属性值相关联的值描述了目的地属性值是如何创建的。 核心支持最常见情况下的速记。 不太常见的情况下,一个更详细的语法或者不能通过以这种方式表达的,需要编写一个自定义插件。
速记
简单复制
获取插件(get plugin) 用于从一个源属性值复制值。 与所有其他进程插件,可以不用显式命名即可使用它。 例如,复制源属性的值主题(subject)到目的地标题(title)。
process:
  title: subject

创建一个插件
目的地可能是由一个插件(除了隐式获得(get))创建的。 在这种情况下,属性值与目的地相关联的属性值包含一个关联数组插件,使用属性值来识别插件,对于的特殊的的插件,可能需要其他的属性值。 在这个示例中,我们使用 迁移插件 ( 将属性值传递到迁移插件之前,源数据作者(sourse:author)首先使用获取(get)插件获得访问源的路径
process:
  uid:
    plugin: migration
    id: users
    source: author

完整过程
有时,源值必须通过传递多个插件的属性值来得到目的地的属性值和结构。 在这种情况下,属性值和目的地相关的是一个关联数组列表,每个都包含至少一个 插件的属性值及其配置,该配置和上述的单个插件的类似。 传入的源值传递给第一个插件,输出的属性值再传递到第二个插件的输出属性值,以此类推(不应该理解为等等)。 例如,考我们虑如何传递Drupal 6文本格式为可见用户(visible-user)的名字到一个单独的Drupal 8机器名: 过滤器格式化机器的名字首先是应用创建的标签 ,第一个machine_name插件创建的机器名称,然后再使用重复数据删除插件。
process:
    format:
        -
            plugin: machine_name
            source: name
        -
            plugin: dedupe_entity
            entity_type: filter_format
            field: format
这也就是说源属性值命名为名称(name)是传递到 机器(machine_name)插件 ,将原始字符串转换成小写字母数字(加下划线)的名称。 因为这可能会导致相同的机器名称传入不同的的字符串,我们需要唯一的机器名过滤格式(filter_format)实体,接下来我们调用一个 dedupe_entity插件 。 dedupe_entity插件没有指定源;机器名(machine_name)插件的结果隐式传递到dedupe_entity插件,这也包含了 entity_type和 filed配置的属性值, dedupe_entity插件的结果,作为最后一个过程,被分配到目的地属性值格式中。
嵌套的值
如果你想设置 $destination['display_settings']['label']['format'] 或者从源中读取, $source['display_settings']['label']['format'] 你需要使用 display_settings:label:format. 比如:
process:
  source: 'display_settings:label:format'
不要忘单引号。
处理多个属性值 许多插件是一个属性值值作为输入。 迁移系统自动识别该属性值是通过一个列表,而不是通过插件重复性的调用每一个属性值。
无源(属性值)
如果目的地没有属性值,建议通过如下方式增加迁移:
process:
  foo: { }

首先来表示一个空数组( 也可以使用[])。 系统识别和处理空数组比较特殊,该过程也没有设置foo的属性值。 然而,这可以使得一个分析工具或UI识别迁移,意识到这是一个空属性值,不希望它是集。没有这些,可能发出的一个警告:目的地属性值会不确定。
参考常量(const value)相关设置为空,而不是设置一个值。