Sto usando il modulo Migrate per una migrazione da D7 a D8 e sto scrivendo manualmente l'intera migrazione nel codice (piuttosto che usare il modulo di migrazione D7 incorporato, poiché volevo un controllo più granulare sulla migrazione).
Ho la seguente struttura: il sito D7 ha un campo immagine in cui le immagini sono memorizzate come entità File. Sul sito D8, il campo immagine è un riferimento di entità a un'entità multimediale (e l'entità multimediale a sua volta ha un campo immagine).
Inizialmente, avevo la seguente migrazione per le mie immagini:
id: image_files
source:
plugin: legacy_images
constants:
source_base_path: http://example.com/
destination:
plugin: 'entity:file'
process:
fid: fid
filename: filename
source_full_path:
-
plugin: concat
delimiter: /
source:
- constants/source_base_path
- uri
-
plugin: urlencode
uri:
plugin: file_copy
source:
- '@source_full_path'
- uri
filemime: filemime
status: status
All'interno del mio file di migrazione del nodo articolo, avevo il seguente:
'field_article_image/target_id':
plugin: migration
migration: image_files
source: field_article_image
ma mi sono reso conto che questo non avrebbe funzionato. Il target_id proveniente dalla migrazione dei file immagine era in realtà un ID entità file, non un ID entità multimediale. Nel mondo ideale, mi piacerebbe trovare un modo per creare una terza migrazione, che crei questo passaggio intermedio e migra le entità dei file in Entità multimediali e quindi associ tale migrazione alla migrazione degli articoli. Tuttavia, non riesco a capire un buon modo per farlo.
Il piano B consisterà semplicemente nella creazione di un plug-in di processo per la migrazione delle immagini, che creerà manualmente le entità dei file, li collegherà alle entità multimediali e passerà la migrazione agli articoli (questo rimuove il passaggio intermedio). Ciò significherebbe, tuttavia, che mentre le entità multimediali possono essere ripristinate, le entità file non possono.