Sto lavorando con il migratemodulo per la prima volta e ho lavorato db_selectun po ' con l' API, ma sto riscontrando un errore.
Sto cercando di convertire alcune vecchie etichette in una tassonomia drupal. Quando accedo alla /admin/content/migratepagina, esegue correttamente la mia query e mostra il numero corretto di righe da migrare. Tuttavia, quando provo effettivamente a eseguire l'importazione, ottengo questo errore:
Migrazione non riuscita con eccezione del plug-in di origine: SQLSTATE [23000]: Violazione del vincolo di integrità: 1052 La colonna "labelId" nella clausola on è ambigua
Ecco il codice che ho nella mia classe LabelMigration:
$this->map = new MigrateSQLMap($this->machineName,
array(
'labelId' => array('type' => 'int', 'not null' => TRUE)
),
MigrateDestinationTerm::getKeySchema()
);
$query = db_select('migrate_account_label', 'l')
->fields('l', array('labelId', 'label'))
;
$query->leftJoin('migrate_asset_labels_membership', 'lm', 'l.labelId = lm.labelId');
$query->leftJoin('migrate_asset', 'a', 'lm.assetId = a.assetId');
$query->addExpression('count(*)', 'num');
$query->condition('a.type', 'B');
$query->groupBy('l.labelId');
$query->groupBy('l.label');
$this->source = new MigrateSourceSQL($query);
// Set up our destination - terms in the vocabulary
$this->destination = new MigrateDestinationTerm('article_labels');
$this->addFieldMapping('name', 'label');
$this->addFieldMapping('description')
->defaultValue('');
Se rimuovo le leftJoin()chiamate, ovviamente l'errore ondell'istruzione scompare, ma non capisco quanto labelIdsia ambiguo perché lo faccio sempre riferimento con un alias di tabella.
Qualche idea da dove provenga questo errore? Viene dalla MigrateSQLMap in alto? In tal caso, come posso fare riferimento a questo labelIdcon un alias per renderlo non ambiguo? Ho provato a farlo l.labelId, ma non ha funzionato.