Ok, petrec doar 8 ore cu modul de migrare. Nu am reușit să găsesc un singur exemplu de lucru pentru migrarea datelor SQL. Chiar și documentația proprie a lui Drupal are statul „învechit”.
Încerc să import doar titluri - așa că ar trebui să fie destul de simplu. Din păcate, nici măcar nu primesc o eroare când încerc să import configurația și nici prin pluginul sursă.
test_migrate_er.info.yml - (modulul este activat)
nume: Test Migrate ER
tip: modul
descriere: „Importator pentru noduri de știri prin sql („test” // Typo 3)”
pachet: test
versiune: VERSIUNE
cerinta_versiune_core: ^8.8.0 || ^9,0
proiect: „test_migrate_er”
dependențe:
- drupal:migrate
- drupal:migrate_tools
- drupal:migrate_plus
migrate_plus.migration_group.test_migrate_content.yml (acesta este importat prin „drush cim”)
uuid: 366085cb-4cea-49d1-84a0-534afd31b114
langcode: en
stare: adevărat
dependențe: { }
id: test_migrate_content
label:„TEST IMPORT”
descriere: nul
tip_sursă: nul
modul: nul
shared_configuration: null
sursă:
plugin: test_source
cheie: migra
Conexiunea la baza de date este setată în local.settings.php (folosește cheia sursă)
$datebase['migrate']['default'] = [...]
Când se importă configurația thr, totul pare bine - fără erori... dar atunci când o exporti sursă bit inclusiv subelementele (plugin și cheie) dispar ca și cum ar fi atribute nevalide. Acest lucru ar explica, de asemenea, de ce pluginul / migrarea nu este afișată niciodată atunci când se testează prin drush ms. Se pare că analizatorul de configurare îl ignoră.
Plugin sursă (/web/modules/custom/test_migrate_er/src/Plugin/migrate/source/News.php. -- modulul „test_migrate_er” este activat)
<?php
spațiu de nume Drupal\test_migrate_er\Plugin\migrate\source;
utilizați Drupal\migrate\Plugin\migrate\source\SqlBase;
utilizați Drupal\migrate\Row;
/**
* Exemplu minimalist pentru un plugin sursă SqlBase.
*
* @MigrateSource(
* id = "sursa_test",
* source_module = "test_migrate_er",
* )
*/
Class News extinde SqlBase {
/**
* {@inheritdoc}
*/
interogare de funcție publică () {
// Datele sursă sunt interogate din tabelul „curling_games”.
$query = $this->select('tx_news_domain_model_news_copy', 'n')
->fields('n', [
„uid”,
'tstamp',
'crdate',
„datetime”,
'titlu',
'teaser',
'corpul textului',
]);
returnează $interogare;
}
/**
* {@inheritdoc}
*/
câmpuri de funcții publice() {
$câmpuri = [
'uid' => $this->t('uid' ),
'tstamp' => $this->t('tstamp' ),
'crdate' => $this->t('crdate' ),
'datetime' => $this->t('datetime' ),
'title' => $this->t('titlu' ),
'teaser' => $this->t('teaser' ),
'bodytext' => $this->t('bodytext' ),
];
returnează $câmpuri;
}
/**
* {@inheritdoc}
*/
funcția publică getIds() {
întoarcere [
'uid' => [
'type' => 'întreg',
'alias' => 'n',
],
];
}
/**
* {@inheritdoc}
*/
funcția publică pregătiRând(Rând $rând) {
// Acest exemplu arată cum pot fi adăugate proprietățile sursei
// prepareRow(). Datele sursei sunt stocate ca 2017-12-17
// și orele ca 16:00. Drupal 8 salvează câmpurile de dată și oră
// în format ISO8601 2017-01-15T16:00:00 pe UTC.
// Concatenăm data și ora sursei și adăugăm secundele.
// Același rezultat ar putea fi obținut și folosind „concat”
// și „format_date” procesează pluginurile în migrare
// definiție.
// $date = $row->getSourceProperty('data');
// $time = $row->getSourceProperty('time');
// $datetime = $date . 'T'. $timp . ':00';
// $row->setSourceProperty('datetime', $datetime);
return parent::prepareRow($row);
}
}
Găsești o mulțime de exemple de coduri de „migrare”... niciunul dintre ele nu vizează SQL și nici unul nu pare să fie actualizat. Mă întreb dacă cineva știe un exemplu de lucru sau măcar o documentație corectă. Asta ar face zilele următoare mult mai plăcute :)
Multumesc pentru ajutor