На самом деле, кажется, это не так уж сложно… в 2012 году. Да, вам нужно отслеживать идентификаторы источников и идентификаторы импорта, но модуль миграции сделает это за вас в аккуратной маленькой таблице. Вы можете присоединиться к этой таблице в своем исходном запросе и обновить поле ссылки на узел с помощью nid узла .., на который указывает ссылка. Конечно, указанные узлы уже должны быть импортированы. Если их не было, вы можете запустить «обновление» позже, и ссылочные nids также будут введены на основе последнего импорта. На практике:
$query = Database::getConnection(
'default', 'mysourcedb'
)->select(
'mysourcetable','source'
)->fields('source', array(
'id',
'title',
'whatever'
'rel_rec_id'
)
);
$query->leftJoin('migrate_map_relimport','relmap','relmap.sourceid1=source.rel_rec_id');
$query->addField('relmap','destid1','rel_node_id');
Приведенный выше код предполагает, что у вас есть «mysourcedb» с «mysourcetable» в нем, который ссылается на «rel_rec_id», и есть еще один импорт, называемый RelImport, который импортирует таблицу rel, на которую ссылается rel_rec_id; он уже должен быть запущен (или будет запущен до того, как вы запустите дополнительное обновление). После получения класса RelImport выполните команду migrate-status, чтобы убедиться, что таблица существует.
Чтобы иметь возможность выполнять соединения с таблицей «migrate_map_relimport», убедитесь, что таблицы карты записаны в исходную базу данных, а не в базу данных drupal. Это не всегда нужно, но вот:
$this->map = new MigrateSQLMap(
$this->machineName,
array(
'id' => array(
'type' => 'int',
'unsigned' => true,
'not null' => true,
'alias' => 'source'
)
),
MigrateDestinationNode::getKeySchema(),
'mysourcedb' // connection to use to write map tables
);
и, наконец, назначьте полученный rel_node_id ссылке на ваш узел:
$this->addFieldMapping( 'field_rel_node', 'rel_node_id' );
Yay, это ракетостроение .. YMMV
*-щука
person
commonpike
schedule
12.10.2012