Je travaille avec le migrate
module pour la première fois et j'ai db_select
un peu travaillé avec l' API, mais je rencontre une erreur.
J'essaie de convertir d'anciennes étiquettes en une taxonomie drupale. Lorsque je navigue sur la /admin/content/migrate
page, elle exécute correctement ma requête et affiche le bon nombre de lignes à migrer. Cependant, lorsque j'essaie d'exécuter l'importation, j'obtiens cette erreur:
Échec de la migration avec l'exception du plug-in source: SQLSTATE [23000]: violation de contrainte d'intégrité: 1052 La colonne 'labelId' dans la clause on est ambiguë
Voici le code que j'ai dans ma 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('');
Si je supprime les leftJoin()
appels, il est évident que l'erreur sur l' on
instruction disparaît, mais je ne comprends pas en quoi cela labelId
est ambigu car je le référence toujours avec un alias de table.
Des idées d'où vient cette erreur? Provient-il du MigrateSQLMap en haut? Si oui, comment puis-je faire référence à cela labelId
avec un alias pour le rendre non ambigu? J'ai essayé de le faire l.labelId
, mais cela n'a pas fonctionné.