Ich arbeite migrate
zum ersten Mal mit dem Modul und habe db_select
ein wenig mit der API gearbeitet, aber es tritt ein Fehler auf.
Ich versuche, einige alte Labels in eine Drupal-Taxonomie umzuwandeln. Wenn ich zur /admin/content/migrate
Seite navigiere , wird meine Abfrage korrekt ausgeführt und die richtige Anzahl von Zeilen angezeigt, die migriert werden sollen. Wenn ich jedoch tatsächlich versuche, den Import auszuführen, wird folgende Fehlermeldung angezeigt:
Migration mit Ausnahme des Quell-Plugins fehlgeschlagen: SQLSTATE [23000]: Verletzung der Integritätsbeschränkung: 1052 Die Spalte 'labelId' in der on-Klausel ist nicht eindeutig
Hier ist der Code, den ich in meiner LabelMigration-Klasse habe:
$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('');
Wenn ich die leftJoin()
Aufrufe entferne, verschwindet offensichtlich der Fehler bezüglich der on
Anweisung, aber ich verstehe nicht, wie labelId
mehrdeutig ist, da ich immer mit einem Tabellenalias darauf verweise.
Irgendwelche Ideen, woher dieser Fehler kommt? Kommt es von der MigrateSQLMap oben? Wenn ja, wie kann ich das labelId
mit einem Alias referenzieren, um es nicht mehrdeutig zu machen? Ich habe versucht, es zu schaffen l.labelId
, aber das hat nicht funktioniert.
Ich dachte, dass er
alias
auf1
(dh boolean true) gesetzt hat, aber es gibt einen Grund, warum es eine Zeichenfolge ist - das ist der eigentliche Alias. Wenn Sie also ein Alias sindn
, ist ,'alias' => 'n'
. Das hat mich ungefähr eine halbe Stunde gekostet.quelle