Wie Massenupdate durchführen, wenn Bulk Operations abbricht?
am 17.01.2023 - 08:58 Uhr in
Hallo zusammen,
in einer Drupal 9 Installation gibt es einen Custom Content-Type type-1. Insgesamt wurden 15.000 Nodes angelegt. Jetzt soll nachträglich ein neues Textfeld text_x zu type-1 hinzugefügt werden.
text_x soll mit einer Bulk-Operation befüllt werden. Allerdings ist es kein Standardtext, sondern abhängig von den Node-Daten.
Meine Lösung sah vor in einem custom Module hook_presave zu nutzen, um das Feld zu befüllen. Anschließend habe ich mit Bulk Operation die Nodes nochmal abgespeichert. Bei einzelnen Nodes funktioniert es, d.h. die presave Funktion greift. Bei einer größeren Anzahl Nodes fliegt Bulk Operations aber aus der Kurve und bricht ab. 15.000 Nodes kann ich aber nicht einzeln nacheinander updaten.
Hat jemand eine Idee, was es für alternative Möglichkeiten gibt?
Danke & Grüße, rhodes
- Anmelden oder Registrieren um Kommentare zu schreiben
Warum bricht VBO ab? Ich habe
am 18.01.2023 - 13:53 Uhr
Warum bricht VBO ab? Ich habe in ähnlichen Szenarien mir eine eigene VBO-Action geschrieben (Siehe Anleitung). Das Basis Gerüst kann man immer wieder verwenden. Du kannst bei VBO ja angeben, wie groß die Batches sein dürfen, damit Du nicht in Probleme mit der max_execution_time kommst.
Ich füge als Beispiel eine execute Funktion von mir an. Darin wird der Text eines Feldes (text-area) in ein anderes umkopiert und das Original geleert.
public function execute(ContentEntityInterface $entity = NULL) {
if ($entity->bundle() == "testwl") {
$text = $entity->get('field_textarea1')->getValue();
$entity->set('field_textarea2', $text);
$entity->set('field_textarea1', Null);
$entity->save();
}
return $this->t('Textarea in :title moved',
[
':title' => $entity->getTitle(),
]
);
}
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Danke..
am 19.01.2023 - 11:17 Uhr
das probiere ich gerne.
Ich habe das aktuelle Problem mit einem drush command auf der console gelöst. drush entit:save node bundle =