Sto lavorando con il migrate
modulo per la prima volta e ho lavorato db_select
un 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/migrate
pagina, 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 on
dell'istruzione scompare, ma non capisco quanto labelId
sia 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 labelId
con un alias per renderlo non ambiguo? Ho provato a farlo l.labelId
, ma non ha funzionato.