it-swarm.com.de

Was ist der Zweck von Drush-Entity-Updates?

Nach dem Aktualisieren von Drupal 8 Module) wurde ich auf der Statusseite Drupal 8) gewarnt, dass:

Entitäts-/Felddefinitionen: Die folgenden Änderungen wurden in den Entitätstyp- und Felddefinitionen festgestellt.

Nach einigem Stöbern in Google scheint die Lösung dafür darin zu bestehen, drush entity-updates. Ich finde dies jedoch etwas seltsam, da es sich anscheinend um einen weiteren Befehl handelt, den man sich nach dem Aktualisieren der Datenbank merken oder in den Workflow integrieren muss, ganz zu schweigen davon, dass es nicht sofort offensichtlich war, wie die ursprüngliche Warnung behandelt werden soll.

Darüber hinaus wird in der Entwicklung häufig eine Warnung für andere Aktionen auf der Statusseite angezeigt, sodass Sie nicht sofort wissen, ob Sie dies tun müssen.

Kann jemand erklären, wofür diese Warnung gedacht ist - oder vielmehr, warum diese Funktion in D8 eingeführt wurde und warum sie nicht in den Datenbankaktualisierungsvorgang einbezogen wird, sondern separat ausgeführt werden muss?

14
njp

drush entity-updates ist ein Entwicklertool. Wenn Sie Entitäts-/Felddefinitionen in Ihrem benutzerdefinierten Modul ändern, können Sie dies schnell anwenden.

In der Produktion sollte dies nicht passieren. Wenn Sie ein Modul zwischen offiziellen Releases aktualisieren, sollte der Update-Code im Modul dies behandeln.

In Ihrem Fall erwähnen Sie jedoch, dass sich Ihre Website in der Entwicklung befindet. Es gibt also viele Dinge, die dies verursacht haben könnten. Entweder in Ihrem eigenen Code oder in Entwicklungs- oder Alpha-Versionen von Contrib-Modulen.

Ich habe dieses Beispiel aus der CR gefunden Aktualisierungsfunktionen für Entitätsschema-Aktualisierungen schreiben, Automatisierung entfernt (wo es weitere Beispiele gibt):

/**
 * Add 'revision_translation_affected' field to 'node' entities.
 */
function node_update_8001() {
  // Install the definition that this field had in
  // \Drupal\node\Entity\Node::baseFieldDefinitions()
  // at the time that this update function was written. If/when code is
  // deployed that changes that definition, the corresponding module must
  // implement an update function that invokes
  // \Drupal::entityDefinitionUpdateManager()->updateFieldStorageDefinition()
  // with the new definition.
  $storage_definition = BaseFieldDefinition::create('boolean')
      ->setLabel(t('Revision translation affected'))
      ->setDescription(t('Indicates if the last edit of a translation belongs to current revision.'))
      ->setReadOnly(TRUE)
      ->setRevisionable(TRUE)
      ->setTranslatable(TRUE);

  \Drupal::entityDefinitionUpdateManager()
    ->installFieldStorageDefinition('revision_translation_affected', 'node', 'node', $storage_definition);
}
19
4k4

Der Befehl "drush entity-updates" wurde aus Version 8.7.0 entfernt

Siehe https://www.drupal.org/node/3034742

Ab 8.7.0 bietet Drupal core keine Unterstützung mehr für automatische Entitätsaktualisierungen. Wenn ein Entitätstyp oder eine Feldspeicherdefinition erstellt, geändert oder gelöscht werden muss, muss dies mit einem erfolgen explizite Aktualisierungsfunktion, wie sie von der Aktualisierungs-API bereitgestellt wird, und Verwendung der vom Entitätsdefinitions-Aktualisierungsmanager bereitgestellten API.

1
Andriyun