Verwenden des Migrate-Moduls: Ich verstehe, dass prepareRow () einen Filter für die Zeile ausführt und unter bestimmten Bedingungen TRUE oder FALSE zurückgeben sollte, wodurch eine Zeile migriert werden kann oder nicht, aber könnte jemand klarstellen:
- wann zu verwenden vorbereiten ()
- wann ist prepareRow () zu verwenden?
- Warum würden Sie der anfänglichen SQL-Abfrage keinen Filter hinzufügen, um Zeilenergebnisse zu filtern, die Sie möglicherweise entfernen / in eine der oben genannten Optionen aufnehmen?
Vielen Dank!
Antworten:
Dies alles wird ausführlich in der vom Projekt bereitgestellten Dokumentation zu Migrationsklassen behandelt . Insbesondere auf der Seite Commononly Implemented Migration Methods (Commononly Implemented Migration-Methoden) , auf der Folgendes angegeben ist und weitere einfache Implementierungen von Beispielfunktionen enthalten sind. Aus den Dokumenten ...
Funktion prepare_row ($ row)
Funktion vorbereiten ($ entity, stdClass $ row)
Das Migrate- Modul ist ein Framework, mit dem Sie einen Migrationsprozess von einem Quelldatenelement zu einem Zielspeicherort und einer Zielkonfiguration kapseln können. Eine Migration besteht aus:
Die API bietet Hooks, um die Daten zu beeinflussen, die in diesem Lebenszyklus einer Migration verschoben werden. Indem Sie Daten über Ihre erste Abfrage von der Migration ausschließen, begrenzen Sie, wie viel Kontrolle Sie über die Gesamtdaten haben, die Sie verschieben können. Für Submigrationen ist dies möglicherweise hilfreich. Bei einer allgemeinen Inhaltsmigration möchten Sie jedoch, dass Ihre Migration so umfassend wie möglich ist.
quelle
Wenn Sie die richtige Zeile auswählen können, indem Sie sie in eine Abfrage schreiben, wählen Sie sie aus. PreprareRow () kann jedoch in komplexeren Systemen verwendet werden, in denen möglicherweise mehrere Parameter erforderlich sind, bevor die Zeile migriert wird. In einem solchen Fall ist es einfacher, alle Zeilen zu durchlaufen und die Logik zeilenweise auszuführen.
prepare () wird nach prepareRow () ausgeführt und ist Ihre letzte Chance, die Entität zu ändern, bevor sie in der Datenbank gespeichert wird.
Weitere Informationen hierzu finden Sie hier: https://www.drupal.org/node/1132582
quelle
Dies ist eine Teilantwort und in keiner Weise vollständig. Ich würde auch gerne mehr über beide erfahren. Dies kann also Teil einer Diskussion sein; obwohl ich aufgrund der folgenden Codefragmente und Beispiele, wie ich die obigen Klassen verwendet habe, eher als Antwort als als Kommentar geschrieben habe.
Lassen Sie mich einige meiner Verwendungen prepareRow () als - veranschaulichen, was es tut.
Vor kurzem gab ich einige Daten zum Importieren aus einer Nicht-Drupal-Datenbank. Für die Entität, zu der ich hinzufüge, müssen Felder eingegeben werden, die ich nicht in meinem Datenimport habe.
Bevor meine Quellklasse erstellt wird, kann ich hinzufügen
und dann kann ich in der Funktion prepareRow Folgendes tun
Sie können hier bei Bedarf auch php if / else-Anweisungen ausführen.
Ich habe auch die Vorbereitungsfunktion in meinem Code verwendet und verwende sie, um der Entität Werte zuzuweisen.
Ich musste dies nur in diesem Szenario verwenden, da ich mein eigenes benutzerdefiniertes Knoten-Plugin erstellt habe.
Auch wenn Sie diesbezüglich Berechnungen durchführen müssen, können Sie dies in prepareRow tun, das vor prepare () ausgeführt wird.
Zum Beispiel hatte ich beim Import einen Wert mit der Bezeichnung "Stadt" - und konnte daraus eine Term-ID machen.
Ich hoffe das hilft.
quelle