Come migrare a Drupal 8 da una sorgente SQL in 6 semplici passaggi
Pubblicato: 2020-11-24Si è parlato molto dell'importanza e dei vantaggi della migrazione a Drupal 8. La migrazione a Drupal è la parte più significativa di un flusso di lavoro di sviluppo. Dobbiamo garantire che i contenuti vengano trasferiti senza problemi senza perdere informazioni e dati critici sull'utente. Controlla questa guida completa per una corretta migrazione da Drupal 7 a Drupal 8.
Esistono diversi modi per migrare a Drupal 8 utilizzando varie fonti. Abbiamo già scritto su come migrare da CSV a Drupal 8. Altre fonti includono SQL, XML, JSON, ecc. In questo blog parleremo della migrazione a Drupal 8 utilizzando SQL come fonte.

Perché SQL?
Sebbene la scelta dell'origine dati dipenda in gran parte dall'origine dei dati esistenti necessari per la migrazione, alcuni degli altri motivi comuni per la scelta dell'origine SQL per una migrazione di Drupal 8 sono:
- È facile scrivere query per ottenere i dati richiesti collegandosi al database.
- La migrazione dei dati da un server a un altro sarà più rapida di qualsiasi altro metodo.
- Riduce l'utilizzo di molti moduli forniti.
- Non è necessaria l'esportazione dei dati delle viste che viene utilizzata per esportare i dati CSV delle viste dai siti Drupal 7.
- Non avremo bisogno del campo della password di Views che viene utilizzato per la migrazione di informazioni sensibili (password in hash), poiché stiamo utilizzando la query DB.
- Anche il modulo CSV di origine della migrazione non è necessario poiché stiamo utilizzando l'origine SQL.
Che il processo di migrazione abbia inizio!
In questo blog, eseguiremo la migrazione degli utenti a un sito Drupal 8. Di seguito sono riportati i passaggi che eseguiremo per migrare a Drupal 8:
1. Creare un modulo personalizzato per la migrazione.
2. Fare riferimento al database di origine.
3. Definire l'YML di migrazione e mappare i campi Drupal identificati.
4. Creare un plugin di origine per la migrazione.
5. Elaborare campi a valore singolo, multivalore e indirizzo.
6. Eseguire la migrazione utilizzando lo strumento della riga di comando drush.
Passaggio 1: creare un modulo personalizzato per la migrazione di Drupal 8.
Per prima cosa, creiamo un modulo personalizzato mentre crei in Drupal 8. Dai un'occhiata a questo blog dettagliato per creare moduli personalizzati in Drupal 8. Qui stiamo creando un modulo chiamato " migrazione dei dipendenti dell'azienda ". La struttura del modulo è la seguente:

company_employee_migrate.info.yml : consiste in informazioni di base riguardanti il modulo e le sue dipendenze.
company_employee_migrate.install : verrà utilizzato per scrivere script PHP che dovrebbero attivarsi durante l'installazione e la disinstallazione del modulo. Nel nostro caso, stiamo cancellando la configurazione della migrazione quando il modulo viene disinstallato. Guarda lo screenshot qui sotto per lo script.

company_employee_migrate.module : Questo sarà usato per definire gli hook generali per il sito. Queste sono le cose iniziali necessarie per il modulo. Spiegheremo il resto nei passaggi successivi.
Passaggio 2: fare riferimento al database di origine
Successivamente, dobbiamo impostare il database di origine da cui stiamo estraendo i dati. Aggiorna il file settings.php per il tuo sito Drupal spostandoti su webroot -> sites -> default -> settings.php .
Aggiungi la nuova connessione al database sotto la connessione predefinita come mostrato nello screenshot qui sotto. " migrare " è la chiave per il database di origine.

Passaggio 3: definire l'YML di migrazione e mappare i campi Drupal.
Ora, dobbiamo identificare i campi che vogliamo migrare e mappare quei campi nella migrazione yml. In questo esempio stiamo migrando ID utente, nome utente, password, e-mail, stato, timestamp creato, nome, cognome, ruolo professionale, indirizzo postale ecc.
Dopo l'identificazione dei campi, dobbiamo definire la migrazione su migrate_plus.migration.company_employee.yml . Ora diamo un'occhiata più da vicino alla migrazione yml e alle loro mappature.

id: ID univoco per la migrazione yml.
label: nome visualizzato per la migrazione.
Migration_group : nome del gruppo di migrazione.
source: Annotation Nome del plug-in di origine della migrazione. Questo sarà definito nell'annotazione @MigrateSource in src/Plugin/migrate/source/CompanyEmployee.php .
destinazione: nome del plug-in di destinazione della migrazione. In questo caso, è entità:utente poiché stiamo migrando entità utente.
process: nel processo, mapperemo i campi Drupal con i campi di origine. I valori a sinistra sono i nomi delle macchine dei campi e i valori a destra sono i nomi dei campi che passiamo dal plug-in sorgente.
Migrazione_dipendenze: questa è una chiave facoltativa. Verrà utilizzato solo se esiste una dipendenza da altre migrazioni.
Passaggio 4: creare un plug-in di origine per la migrazione
Il plug-in di origine della migrazione è il cuore della migrazione SQL. Di seguito è riportata la spiegazione dettagliata per il plug-in sorgente.

- Il plugin sorgente può essere creato su src/Plugin/migrate/source/CompanyEmployee.php
- Lo spazio dei nomi sarà Drupal\company_employee_migrate\Plugin\migrate\source .
- Le annotazioni @MigrateSource includono l'ID del plug-in di origine che mappiamo nella definizione di migrazione.
- Qui stiamo estendendo la classe Abstract SqlBase fornita dal modulo di migrazione principale.
Vedi lo screenshot qui sotto per riferimento.

Il plugin sorgente deve implementare i seguenti tre metodi:
query() : restituirà i dati dei campi di origine connettendosi al database di origine. Guarda lo screenshot qui sotto che restituirà i dati del campo in cui l'ID utente è maggiore di 0 e la posta dell'utente termina con "@phyins.com".

field() : questo metodo restituirà i campi disponibili nell'origine. Di seguito, ho aggiunto lo snippet di codice per l'elenco dei campi disponibili insieme a baseFields().

getIds() : questo metodo restituirà un ID univoco per la riga di origine. Il codice seguente restituirà un ID utente di tipo intero poiché uid sarà univoco per ogni utente.

Oltre a questi metodi sopra menzionati abbiamo anche:
prepareRow() : questo metodo verrà chiamato una volta per ogni riga. Stiamo caricando i dati qui da diverse tabelle e processi in base al requisito. Qualsiasi proprietà che creiamo utilizzando $row->setSourceProperty sarà disponibile nella fase del processo. Useremo la query Drupal 8 DB per ottenere i dati in prepareRow() .
baseFields() : conterrà un array di campi di base da "users_field_data " che possono essere utilizzati dal metodo query() . Trovi il codice nell'immagine qui sotto.

Passaggio 5: elaborare i campi a valore singolo, multivalore e indirizzo.
In Drupal, abbiamo diversi tipi di campi e l'elaborazione di alcuni campi può diventare un po' complicata per gli sviluppatori durante la migrazione dei contenuti. Ho aggiunto i frammenti di codice per alcuni campi di seguito:
Campi a valore singolo: questi campi includono campi di testo, campi booleani, e-mail, ecc. Trova lo snippet di codice di seguito per ottenere un campo a valore singolo; qui il field_first_name può essere impostato come di seguito.

Campi multivalore : questi campi includono ruoli utente, ruoli professionali, campi di selezione multivalore, caselle di controllo, ecc. Per un campo multivalore è necessario restituire un array associativo. Trova sotto lo snippet di codice per il campo "ruoli".

Campi indirizzo: la migrazione del campo indirizzo fornito dal modulo indirizzi sarà leggermente diversa dalla migrazione di altri campi. Abbiamo bisogno di pre-elaborare i dati interrogati in un array associativo con le chiavi appropriate come mostrato di seguito per field_mailing_address .

Ora tutto pronto per eseguire la migrazione installando il modulo company_employee_migrate nel sito Drupal 8.
Passaggio 6: eseguire la migrazione utilizzando lo strumento da riga di comando drush
Finalmente, siamo pronti per la nostra migrazione SQL. Per eseguire la migrazione, dobbiamo installare drush (se non lo stai già utilizzando).
Elenco di comandi drush utili per la migrazione di Drupal:
drush migrate-status : restituirà lo stato della migrazione con i dettagli.

drush migrate-import migrazione_id: questo importerà i dati dall'origine al sito.

drush migrate-reset-status migrazione_id: se l'esecuzione dello script è stata interrotta o sospesa, lo stato della migrazione verrà visualizzato come "Importazione". Questo comando ripristinerà lo stato della migrazione su "Inattivo" in modo da poter procedere con l'importazione della migrazione.

drush migrate-rollback migrazione_id: questo verrà utilizzato per il rollback allo stato precedente.
