Sto lavorando allo stesso problema in questo momento, quindi capisco la tua confusione. Hai molte domande, ma penso che possano essere riassunte in una domanda singolare:
In che modo il modulo Migrate gestisce la migrazione di un database normalizzato in un'installazione Drupal?
Non è assolutamente semplice, ma ecco la mia comprensione di come funziona. Inizieremo dall'alto (WineWineMigration) scendendo e ponendo domande mentre procediamo.
Iniziamo guardando il codice in cima alla WineWineMigration
classe.
...
$this->dependencies = array('WineVariety', 'WineRegion',
'WineBestWith', 'WineUser', 'WineProducer');
...
Questo dice al modulo Migrate che per migrare il contenuto di Wine, le migrazioni dipendenti - WineVariety, WineRegion, WineBestWith, WineUser, WineProduce - devono prima essere completate.
Quindi quello che abbiamo imparato qui è che le migrazioni possono dipendere da altre migrazioni .
Successivamente abbiamo la mappatura tra la tabella che attualmente contiene le informazioni sul vino di base e il nodo Drupal:
$this->map = new MigrateSQLMap($this->machineName,
array(
'wineid' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'description' => 'Wine ID',
'alias' => 'w',
)
),
MigrateDestinationNode::getKeySchema()
);
Questo è piuttosto semplice, quindi se hai bisogno di chiarimenti te lo fornirò.
Ho intenzione di saltare alcune cose provvisorie che non sono realmente pertinenti per collegare le varie categorie e oggetti del vino.
Ora arriviamo alle mappature dei campi. Osservare:
// Mapped fields
$this->addFieldMapping('title', 'name')
->description(t('Mapping wine name in source to node title'));
$this->addFieldMapping('uid', 'accountid')
->sourceMigration('WineUser')
->defaultValue(1);
// TIP: By default, term relationship are assumed to be passed by name.
// In this case, the source values are IDs, so we specify the relevant
// migration (so the tid can be looked up in the map), and tell the term
// field handler that it is receiving tids instead of names
$this->addFieldMapping('migrate_example_wine_varieties', 'variety')
->sourceMigration('WineVariety')
->arguments(array('source_type' => 'tid'));
$this->addFieldMapping('migrate_example_wine_regions', 'region')
->sourceMigration('WineRegion')
->arguments(array('source_type' => 'tid'));
$this->addFieldMapping('migrate_example_wine_best_with', 'best_with')
->separator(',')
->sourceMigration('WineBestWith')
->arguments(array('source_type' => 'tid'));
$this->addFieldMapping('field_migrate_example_wine_ratin', 'rating');
$this->addFieldMapping('field_migrate_example_top_vintag', 'best_vintages');
Vedi dove dice:
->sourceMigration(...)
Ciò indica alla migrazione che per mappare questo campo è necessario prima soddisfare un'altra migrazione. Credo che questa sia la "migrazione secondaria" di cui hai parlato. Usiamo la region
mappatura dei campi come esempio qui. Abbattendo ...
$this->addFieldMapping('migrate_example_wine_regions', 'region')
->sourceMigration('WineRegion')
->arguments(array('source_type' => 'tid'));
Ciò indica che la regione della categoria nel database di origine è associata a un termine del vocabolario della regione. Come afferma il commento SUGGERIMENTO nel blocco del codice delle mappature dei campi, si presume che le mappature siano fatte sulla base di field_names, ma poiché dipendiamo da una migrazione secondaria mentre la metti, dobbiamo specificare la migrazione da cui dipende e istruirla usa le maree invece dei nomi dei campi.
Più o meno per ogni tabella normalizzata che hai nel tuo database di origine, specificherai una migrazione per ognuna, e poi nei relativi mapping dei campi che coinvolgono quelle tabelle, specificherai migrazioni dipendenti nelle tue chiamate di mapping dei campi , nonché la dichiarazione sulle migrazioni dipendenti all'inizio di ogni migrazione.
Spero che questo possa essere d'aiuto. Non lo capisco da solo, quindi ho usato questa domanda come un'opportunità per migliorare la mia comprensione di come Migrate collega i database. Man mano che imparo un po 'di più, aggiornerò la mia risposta di conseguenza.