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を返す場合にも当てはまります。
移行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
そのときに同様の種類の移行を行ったとき、次の手順を実行しました。
最初に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
例:
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: { }
process: field_audio/target_id: fid
メディアIDを保持しています。Drupal 8のFIDはDrupalのFIDと同じです。7です。したがって、同じFIDをノードに直接接続できます。