나는 지금 같은 문제를 해결하고 있으므로 귀하의 혼란을 이해합니다. 많은 질문이 있지만 단일 질문으로 요약 할 수 있다고 생각합니다.
마이그레이션 모듈은 정규화 된 데이터베이스를 Drupal 설치로 마이그레이션하는 것을 어떻게 처리합니까?
분명히 간단하지는 않지만 작동 방식에 대한 이해가 있습니다. 맨 위 (WineWineMigration)에서 내려 가면서 질문을합니다.
우리는 WineWineMigration
수업 상단의 코드를 살펴보면서 시작합니다 .
...
$this->dependencies = array('WineVariety', 'WineRegion',
'WineBestWith', 'WineUser', 'WineProducer');
...
이렇게하면 마이그레이션 모듈에 Wine 컨텐츠를 마이그레이션하려면 WineVariety, WineRegion, WineBestWith, WineUser, WineProduce와 같은 종속 마이그레이션을 먼저 완료해야합니다.
여기서 배운 것은 마이그레이션이 다른 마이그레이션에 의존 할 수 있다는 것 입니다.
다음은 현재 기본 와인 정보를 보유하고있는 테이블과 Drupal 노드 사이의 매핑입니다.
$this->map = new MigrateSQLMap($this->machineName,
array(
'wineid' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'description' => 'Wine ID',
'alias' => 'w',
)
),
MigrateDestinationNode::getKeySchema()
);
이것은 매우 간단하므로 설명이 필요하면 제공하겠습니다.
나는 다양한 카테고리와 와인 객체를 연결하는 것과 실제로 관련이없는 중간 물건을 건너 뛸 것입니다.
이제 필드 매핑에 도달했습니다. 관찰 :
// Mapped fields
$this->addFieldMapping('title', 'name')
->description(t('Mapping wine name in source to node title'));
$this->addFieldMapping('uid', 'accountid')
->sourceMigration('WineUser')
->defaultValue(1);
// TIP: By default, term relationship are assumed to be passed by name.
// In this case, the source values are IDs, so we specify the relevant
// migration (so the tid can be looked up in the map), and tell the term
// field handler that it is receiving tids instead of names
$this->addFieldMapping('migrate_example_wine_varieties', 'variety')
->sourceMigration('WineVariety')
->arguments(array('source_type' => 'tid'));
$this->addFieldMapping('migrate_example_wine_regions', 'region')
->sourceMigration('WineRegion')
->arguments(array('source_type' => 'tid'));
$this->addFieldMapping('migrate_example_wine_best_with', 'best_with')
->separator(',')
->sourceMigration('WineBestWith')
->arguments(array('source_type' => 'tid'));
$this->addFieldMapping('field_migrate_example_wine_ratin', 'rating');
$this->addFieldMapping('field_migrate_example_top_vintag', 'best_vintages');
그것이 말하는 곳을보십시오 :
->sourceMigration(...)
이는이 필드를 맵핑하려면 다른 이주가 먼저 충족되어야 함을 이주에 표시합니다. 나는 이것이 당신이 말한 "이차 이주"라고 생각합니다. region
여기 에서 필드 매핑을 예로 사용하겠습니다. 그것을 분해 ...
$this->addFieldMapping('migrate_example_wine_regions', 'region')
->sourceMigration('WineRegion')
->arguments(array('source_type' => 'tid'));
이는 소스 데이터베이스의 범주 영역이 영역 어휘 용어에 매핑되어 있음을 나타냅니다. TIP 주석은 필드 맵핑 코드 청크에 설명되어 있으므로 field_names를 기반으로 맵핑한다고 가정하지만, 2 차 이주에 의존하므로 이주를 지정하고 지시해야합니다. 필드 이름 대신 tids를 사용하십시오.
소스 데이터베이스에있는 모든 정규화 된 테이블에 대해 각각 마이그레이션을 지정한 다음 해당 테이블과 관련된 관련 필드 매핑에서 필드 매핑 호출에 종속 마이그레이션을 지정합니다. 각 마이그레이션 시작시 종속 마이그레이션 선언과 함께
이게 도움이 되길 바란다. 나는 이것을 완전히 이해하지 못하기 때문에이 질문을 Migrate와 데이터베이스의 관계에 대한 이해를 향상시킬 수있는 기회로 사용했습니다. 조금 더 배우면 그에 따라 답변을 업데이트합니다.