Pracuję z migrate
modułem po raz pierwszy i db_select
trochę 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/migrate
stronę, 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 on
instrukcji zniknie, ale nie rozumiem, jak labelId
to 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ć labelId
się do niego za pomocą aliasu, aby był niejednoznaczny? Próbowałem to zrobić l.labelId
, ale to nie działało.