Estoy trabajando con el migrate
módulo por primera vez y he trabajado db_select
un poco con la API, pero me encuentro con un error.
Estoy tratando de convertir algunas etiquetas antiguas en una taxonomía drupal. Cuando navego a la /admin/content/migrate
página, realiza mi consulta correctamente y muestra el número correcto de filas que deben migrarse. Sin embargo, cuando realmente intento ejecutar la importación, aparece este error:
La migración falló con la excepción del complemento de origen: SQLSTATE [23000]: Infracción de restricción de integridad: 1052 La columna 'labelId' en la cláusula on es ambigua
Aquí está el código que tengo en mi clase 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 elimino las leftJoin()
llamadas, entonces obviamente el error sobre la on
declaración desaparece, pero no entiendo cómo labelId
es ambiguo porque siempre estoy haciendo referencia a él con un alias de tabla.
¿Alguna idea de dónde viene este error? ¿Viene del MigrateSQLMap en la parte superior? Si es así, ¿cómo puedo hacer referencia a eso labelId
con un alias para que no sea ambiguo? Traté de hacerlo l.labelId
, pero eso no funcionó.
Pensé que se estaba poniendo
alias
a1
(es decir, la verdadera booleano), pero hay una razón que es una cadena - que es el alias actual, así que si estás alias esn
,'alias' => 'n'
. Eso realmente me costó aproximadamente 1/2 hora.fuente