Я працюю з migrate
модулем вперше, і я db_select
трохи працював з api, але я стикаюся з помилкою.
Я намагаюся перетворити деякі старі етикетки в друпальську систематику. Коли я переглядаю /admin/content/migrate
сторінку, він робить свій запит правильно і показує потрібну кількість рядків, які слід перенести. Однак, коли я намагаюся запустити імпорт, я отримую цю помилку:
Помилка міграції за винятком додатка джерела: SQLSTATE [23000]: Порушення обмеження цілісності: 1052 У колонці "labelId" у пункті неоднозначно
Ось код, який я маю в своєму класі 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('');
Якщо я видаляю leftJoin()
виклики, тоді, очевидно, помилка щодо on
твердження відпадає, але я не розумію, наскільки labelId
це неоднозначно, оскільки я завжди посилаюсь на його псевдонім таблиці.
Будь-які ідеї, звідки походить ця помилка? Це йде від MigrateSQLMap вгорі? Якщо так, то як я можу посилатись labelId
на це псевдонімом, щоб зробити його неоднозначним? Я спробував це зробити l.labelId
, але це не вийшло.