Scriu migrații pentru a importa date sursă sub formă de paragrafe.
Aceasta este migrația principală (care funcționează).
id: resource_chapter_section_text
etichetă: importați conținut din coloana resource.body din baza de date sursă ca paragrafe de text_secțiune_capitol.
migration_group: redat_web
sursă:
plugin: resource_chapter_section_text
cheie: migrate_web
proces:
# o valoare reală va fi plasată aici prin migrarea resource_chapter_section_text_content
# trebuie să o facem într-o a doua trecere pentru a evita crearea unei dependențe circulare
text_câmp/valoare:
plugin: default_value
default_value: „substituent”
text_câmp/format:
plugin: default_value
default_value: „text_plat”
destinaţie:
plugin: entity_reference_revisions:paragraph
pachet_predefinit: text_secțiune_capitol
dependențe:
aplicat:
modul:
- redacted_migration
Rețineți că field_text
este populat cu o valoare de substituent. Asta pentru că datele sursă pentru acel câmp trebuie transformate în anumite moduri înainte de a le putea importa. Pentru a evita o dependență circulară, această transformare trebuie făcută până la urmă text_secțiune_capitol
paragrafele au fost importate.
Deci, încerc să scriu o a doua migrare, care va face o a doua trecere peste același tabel sursă și va actualiza paragrafele care au fost create de prima migrare. Aceasta este migrația.
id: resource_chapter_section_text_content
label: convertește conținutul paragrafelor resource_chapter_section_text din pseudo-Markdown în HTML și actualizează URL-urile linkurilor.
migration_group: redat_web
sursă:
plugin: resource_chapter_section_text_content
cheie: migrate_web
proces:
id:
plugin: migration_lookup
migrare: resource_chapter_section_text
sursa: section_id
text_câmp/valoare: conținut_convertit
text_câmp/format:
plugin: default_value
default_value: „full_html”
destinaţie:
plugin: entity_reference_revisions:paragraph
pachet_predefinit: text_secțiune_capitol
overwrite_properties:
- text_câmp/valoare
- câmp_text/format
dependențe_migrație:
necesar:
- text_secțiune_capitol_resurse
- termenul_colecție
- document_node
- temă
- resursă
dependențe:
aplicat:
modul:
- redacted_migration
După cum puteți vedea, specific ID-ul de paragraf existent și folosesc destinație.overwrite_properties
pentru a specifica câmpurile de actualizat.
Am folosit cu succes aceeași tehnică într-o altă migrare pentru a actualiza nodurile existente. Totuși, aici nu funcționează. Migrate pare să încerce în schimb să creeze paragrafe noi. Primesc aceasta eroare:
[eroare] Drupal\Core\Database\IntegrityConstraintViolationException: SQLSTATE[23000]: încălcarea constrângerii de integritate: 1062
Dublați intrarea „3829” pentru cheia „PRIMARY”: INSERT INTO „paragraphs_item” (“id”, „revision_id”, „type”, „uuid”, „langcode”) VALORI (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :placeholder_insert_3 , :db_insert_placeholder_4);
Este posibil să faceți acest lucru cu entitățile de paragraf?