web-dev-qa-db-ja.com

移行中に作成されたメディアアイテムをノードのメディアフィールドに添付する方法

Drupal 7からDrupal 8.にコンテンツを移行しています。現在、移行中にカスタムプロセスを介してメディアに移動しているオーディオフィールドがあります。

作成された新しいメディアのIDを取得したときに、新しく作成されたノードの新しいメディア参照フィールドに添付するようにできません。

以下のインポートの何が問題になっていますか?

field_audio_fileinfo:
-
  plugin: sub_process
  source: field_audio_fileinfo
  process:
    target_id:
      -
        plugin: migration_lookup
        method: process
        source: fid
        migration: upgrade_d7_file
      -
        plugin: my_custom_process
        destination: field_media_audio

私のカスタムプロセスでは、次の方法でメディアを保存してIDを取得できます。

$media_id = $audio_media->id();
$arr[] = array(
  'target_id' => $media_id,
  'display' => NULL,
  'description' => NULL
);
return $arr;

しかし、それは宛先フィールドに入力されていないようです。

これは、プロセスから直接IDを返す場合にも当てはまります。

1
dibs

移行yamlに問題がありました。

Drupal 8の宛先フィールドはfield_media_audioでしたが、質問でわかるように、保存しようとしたfield_audio_fileinfoはDrupal 7ソース。愚かな私。

移行先を認識して修正すると、すべてが機能し、移行スクリプトの1つのパスでメディアが作成および参照されます。

  field_media_audio:
-
  plugin: sub_process
  source: field_audio_fileinfo
  destination: field_media_audio
  process:
    target_id:
      -
        plugin: migration_lookup
        method: process
        source: fid
        migration: upgrade_d7_file
      -
        plugin: my_custom_process
0
dibs

そのときに同様の種類の移行を行ったとき、次の手順を実行しました。

  • 最初にDrupal 8にメディアタイプオーディオを作成し、それをフィールドにしました。

  • 次に、すべてのオーディオファイルの詳細とFIDをD7からエクスポートし、csvファイルを作成しました。

  • オーディオをメディアにインポートするための書かれた移行スクリプト。

例:

source:
  plugin: csv
  path: 'csv file path'
  header_row_count: 1
  keys:
    - fid
  type: audio
  constants:
    bundle: audio
process:
  mid: fid
  bundle: constants/bundle
  langcode:
    plugin: default_value
    source: language
    default_value: und
  name: filename
  uid: uid
  created: upload_date
  changed: upload_date
  field_media_audio_file/target_id: fid
destination:
  plugin: 'entity:media'
  migration_dependencies: {  }
migration_dependencies: null
  • ファイルエンティティにデータをインポートするために使用したのと同じcsvと作成された移行スクリプト。

例:

source:
  plugin: csv
  path: 'csv file path'
  header_row_count: 1
  keys:
    - fid
process:
  uid: uid
  fid: fid
  filename: filename
  created: upload_date
  changed: upload_date
  filemime: mime
  uri: uri
destination:
  plugin: 'entity:file'
  source_path_property: filepath
  destination_path_property: uri
migration_dependencies: {  }
  • その後、FIDをノードフィールドに追加しました。
process:
  field_audio/target_id: fid

メディアIDを保持しています。Drupal 8のFIDはDrupalのFIDと同じです。7です。したがって、同じFIDをノードに直接接続できます。

0
Disha Bhadra