web-dev-qa-db-ja.com

既存の分類法参照フィールドに移行するにはどうすればよいですか?

フィールドspecialのようにフィールドnidにIDを出力する対応するIDを持つフィールドがあるソースを指定すると、ノードIDが返されます。

新しいサイトに既に存在し、移行されていない分類用語にマッピングしたい。

これは私のカスタムymlファイルのプロセス部分です:

process:
  nid: nid
  vid: vid
  # there were some more fields here that I left out.
  # hardcode destination node type as publication
  type:
    plugin: default_value
    default_value: publication
  # custom fields
  field_special:
    plugin: static_map
    source: special
    map:
      1: 1
      2: 2
      3: 3

field_special移行先のノードの分類用語参照フィールドとして。

分類用語参照フィールドである宛先フィールドで使用されるソースフィールドをどのようにマッピングできますか?

Drupal 8.1.2で、migrate_plus migrate_tools migrate_drupalを有効にして使用しています。

3
FLY

私は私のymlを使用するように書き直しました:

field_special:
  plugin: iterator
  source: field_special
  process:
    target_id: tid

そして、クラスにpreparerow関数を記述して、配列をソースプロパティとして出力します。

  /**
   * {@inheritdoc}
   */
  public function prepareRow(Row $row) {
    $nid = $row->getSourceProperty('nid');

    $result = $this->getDatabase()->query(
      'SELECT 
        GROUP_CONCAT(field_special_tid) as tids
      FROM
        {field_data_field_special} fs
      WHERE
        fs.entity_id = :nid
      ',
      array(':nid' => $nid)
    );
    foreach ($result as $record) {
      if (!is_null($record->tids)) {
        $row->setSourceProperty('special', explode(',', $record->tids));
      }
    }
    return parent::prepareRow($row);
  }

この回避策は今のところ機能しますが、より良い答えがある場合は投稿してください。

2
FLY