迁移的源

迁移配置实体[entity]总是包含一个源的属性值。 该源的属性值是一个关联数组,其中包含插件的名称和配置。 只有源插件的属性值是必须存在的,其他一些插件可能没有任何配置。

source: plugin: d6_node

迁移过程

原文链接: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)相关设置为空,而不是设置一个值。

过程插件get

原文链接Process plugin: get
过程插件get
通常, 获得get插件是每个流程的开始,通常是通过速记添加到另一个插件的源属性值。
get插件有一个配置的属性值source。该值通常是一个源属性值,当运行这个插件后,过程值将被设置为该属性的值。 即: br>

process:
    bar:
        plugin: get
        source: foo
<code>

<br>
只会复制源foo的属性值到目标foo的属性,由于geet是默认的过程插件,因此他可以速记为这样的:

<code>
process:
    bar: foo

get插件还支持源属性值的列表。 如果该列表包含一个空元素,那么将使用当前的属性值。这使得当一个源属性值为一个空字符串作为它的名称时而获得该源是不可能的。
get也支持复制目的地的属性值。 这些都是@符号来表示:
process:
    foo:
        plugin: machine_name
        source: baz
    bar:
        plugin: get
        source: @foo
复制目的地foo的属性值到目标属性变得简单起来。 foo的配置也包括出于示范说明的目的。
正因为如此,如果你的源或目标属性实际上始于一个@符号,你需要两个该(@)开始符号。 这意味着,如果一个目的地属性值开始于@符号,你想引用它,你就需要三个@符号,一个显示目的地,两个是为了避免实际的@符号。
process:
    @foo:
        plugin: machine_name
        source: baz
    bar:
        plugin: get
        source: @@@foo
这中情况应该极少发生。

常量

原文链接Constant values

常量


有时你需要一个常量。 可能会用来也许是连接插件或者一些只是国定的值。 在这种情况下,首先需要在源中定义一个常量,然后过程中的的任何地方使用它。下面的示例设置id的属性值为常量node_search:

source:
  constants:
    id: node_search
process:
  id: constants/id
注意, 常量属性值没有什么特别的。如果包含一个constants的属性值,如果用另一个名字,例如defaults。换句话说,下面的代码示例和上面的作用相同:
source:
  defaults:
    id: node_search
process:
  id: defaults/id
因为源中这样的定义提供的默认值是从源中每一行检索(没有深度合并)。