Pracuję z migratemodułem po raz pierwszy i db_selecttrochę pracowałem z interfejsem API, ale mam błąd.
Próbuję przekształcić niektóre stare etykiety w taksonomię drupala. Gdy przeglądam /admin/content/migratestronę, wykonuje moje zapytanie poprawnie i pokazuje odpowiednią liczbę wierszy, które powinny zostać zmigrowane. Jednak gdy próbuję uruchomić import, pojawia się ten błąd:
Migracja nie powiodła się z wyjątkiem wtyczki źródłowej: SQLSTATE [23000]: Naruszenie ograniczenia integralności: 1052 Kolumna „labelId” w klauzuli jest niejednoznaczna
Oto kod, który mam w mojej klasie 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('');
Jeśli usunę leftJoin()wywołania, to oczywiście błąd dotyczący oninstrukcji zniknie, ale nie rozumiem, jak labelIdto jest niejednoznaczne, ponieważ zawsze odwołuję się do niej za pomocą aliasu tabeli.
Wszelkie pomysły, skąd pochodzi ten błąd? Czy pochodzi z MigrateSQLMap u góry? Jeśli tak, to jak mogę odwoływać labelIdsię do niego za pomocą aliasu, aby był niejednoznaczny? Próbowałem to zrobić l.labelId, ale to nie działało.